1. 从零开始:搭建你的第一个React登录表单
很多刚接触React的朋友,一上来就想做个登录页面,这想法特别好。登录表单几乎是每个Web应用的标配,它看似简单,却能把React的核心概念——组件、状态、事件处理——都串起来练一遍。我自己刚开始学React那会儿,也是从捣鼓登录框开始的,踩过不少坑,比如状态更新不对、样式乱七八糟、验证逻辑写成一团。今天,我就带你从最基础的开始,一步步搭一个既好看又好用的登录表单,顺便把那些常见的“坑”提前给你填上。
首先,咱们得有个React项目。如果你还没创建,别担心,现在最省事的方法就是用Vite。没错,你可能听过Create React App(CRA),它确实经典,但Vite启动更快,配置也更现代。打开你的终端,执行下面这行命令:
npm create vite@latest my-login-app -- --template react
然后按照提示,进入项目目录(cd my-login-app),安装依赖(npm install),最后运行开发服务器(npm run dev)。浏览器打开 http://localhost:3000,看到欢迎页面就说明环境OK了。接下来,在 src 目录下,我们创建一个新文件 LoginForm.jsx。用 .jsx 后缀是为了更明确地表示这是个React组件。
现在,让我们写出最最核心的表单骨架。别急着加花里胡哨的功能,先把结构搭稳。
import React, { useState } from 'react';
import './LoginForm.css'; // 样式文件我们稍后创建
const LoginForm = () => {
// 1. 使用useState钩子来管理表单数据
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
// 2. 处理表单提交的函数
const handleSubmit = (event) => {
event.preventDefault(); // 阻止表单默认刷新页面的行为
console.log('准备提交的邮箱:', email);
console.log('准备提交的密码:', password);
// 这里先简单打印,后续我们会接入真实的登录逻辑
};
return (
<div className="login-container">
<h2>欢迎回来</h2>
<form onSubmit={handleSubmit}>
<div className="input-group">
<label htmlFor="email">电子邮箱</label>
<input
id="email"
type="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
placeholder="请输入您的邮箱"
required
/>
</div>
<div className="input-group">
<label htmlFor="password">密码</label>
<input
id="password"
type="password"
value={password}
onChange={(e) => setPassword(e.target.value)}
placeholder="请输入您的密码"
required
/>
</div>
<button type="submit" className="submit-btn">
登录
</button>
</form>
</div>
);
};
export default LoginForm;
这段代码就是React表单的“心脏”。我用 useState 创建了两个状态变量 email 和 password,它们分别绑定到两个输入框上。onChange 事件监听用户的每一次输入,并实时更新状态,这就是React所谓的“受控组件”——表单数据完全由React状态控制。handleSubmit 函数会在你点击登录按钮时触发,event.preventDefault() 至关重要,它阻止了表单的默认提交行为(即页面跳转),让我们能用JavaScript来处理一切。
写完组件,别忘了在 App.jsx 里把它用起来:
import LoginForm from './LoginForm';
function App() {
return (
<div className="app">
<LoginForm />
</div>
);
}
export default App;
保存所有文件,回到浏览器,你应该能看到一个非常朴素、只有基础结构的表单了。功能是有了,但看起来确实有点“原始”。别急,我们马上就来给它“化妆”,让它变得美观大方。
2. 颜值即正义:用CSS为表单注入灵魂
一个好看的界面不仅能提升用户体验,还能让你这个开发者更有成就感。我见过不少后台系统,功能强大但界面粗糙,用起来总感觉差点意思。所以,咱们在实现功能的同时,也要兼顾视觉设计。我会带你写一些既实用又有现代感的CSS,你可以根据自己的品牌色进行调整。
在 LoginForm.jsx 同目录下,创建 LoginForm.css 文件。我们来一步步添加样式:
/* 登录容器 - 给它一个精致的卡片效果 */
.login-container {
max-width: 420px; /* 比400px稍宽,看起来更舒适 */
margin: 80px auto; /* 上下留出足够空间 */
padding: 40px 35px;
background-color: #ffffff;
border-radius: 16px; /* 更大的圆角,更现代 */
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08); /* 更柔和、更有层次的阴影 */
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; /* 使用系统字体栈 */
}
/* 标题样式 */
.login-container h2 {
text-align: center;
margin-bottom: 35px;
color: #2d3748; /* 深灰色,比纯黑更柔和 */
font-weight: 600;
font-size: 1.8rem;
}
/* 每个输入项的分组 */
.input-group {
margin-bottom: 24px;
}
/* 标签样式 */
.input-group label {
display: block;
margin-bottom: 8px;
color: #4a5568; /* 中灰色 */
font-size: 0.95rem;
font-weight: 500;
}
/* 输入框样式 - 这里是重点 */
.input-group input {
width: 100%;
padding: 14px 16px;
box-sizing: border-box;
border: 2px solid #e2e8f0; /* 初始边框用浅灰色 */
border-radius: 10px;
font-size: 1rem;
color: #2d3748;
background-color: #f8fafc; /* 非常浅的背景 */
transition: all 0.25s ease; /* 平滑过渡效果 */
}
/* 输入框获得焦点时的效果 */
.input-group input:focus {
outline: none; /* 去掉默认的蓝色轮廓 */
border-color: #4299e1; /* 聚焦时变为蓝色 */
background-color: #ffffff; /* 聚焦时背景变白 */
box-shadow: 0


8601

被折叠的 条评论
为什么被折叠?



