当前位置:首页 > React

react项目登录功能实现

2026-01-27 14:09:24React

创建登录表单组件

在React项目中创建一个登录表单组件,包含用户名和密码输入框以及提交按钮。使用useState管理表单数据。

import React, { useState } from 'react';

function LoginForm() {
  const [formData, setFormData] = useState({
    username: '',
    password: ''
  });

  const handleChange = (e) => {
    const { name, value } = e.target;
    setFormData(prev => ({
      ...prev,
      [name]: value
    }));
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    // 这里添加登录逻辑
  };

  return (
    <form onSubmit={handleSubmit}>
      <div>
        <label>用户名:</label>
        <input 
          type="text" 
          name="username" 
          value={formData.username} 
          onChange={handleChange} 
        />
      </div>
      <div>
        <label>密码:</label>
        <input 
          type="password" 
          name="password" 
          value={formData.password} 
          onChange={handleChange} 
        />
      </div>
      <button type="submit">登录</button>
    </form>
  );
}

export default LoginForm;

实现认证服务

创建认证服务处理登录请求,通常使用axios与后端API交互。将认证令牌存储在本地存储或cookie中。

import axios from 'axios';

const authService = {
  login: async (credentials) => {
    try {
      const response = await axios.post('/api/auth/login', credentials);
      localStorage.setItem('token', response.data.token);
      return response.data;
    } catch (error) {
      throw error;
    }
  },

  logout: () => {
    localStorage.removeItem('token');
  },

  getToken: () => {
    return localStorage.getItem('token');
  }
};

export default authService;

添加路由保护

使用React Router实现受保护路由,未登录用户尝试访问时重定向到登录页面。

import { Navigate } from 'react-router-dom';

function PrivateRoute({ children }) {
  const token = localStorage.getItem('token');
  return token ? children : <Navigate to="/login" />;
}

// 使用示例
<Routes>
  <Route path="/" element={<PrivateRoute><HomePage /></PrivateRoute>} />
  <Route path="/login" element={<LoginForm />} />
</Routes>

实现全局状态管理

使用Context API或Redux管理用户认证状态,使组件能响应登录状态变化。

import React, { createContext, useContext, useState } from 'react';

const AuthContext = createContext();

export function AuthProvider({ children }) {
  const [user, setUser] = useState(null);

  const login = async (credentials) => {
    const data = await authService.login(credentials);
    setUser(data.user);
  };

  const logout = () => {
    authService.logout();
    setUser(null);
  };

  return (
    <AuthContext.Provider value={{ user, login, logout }}>
      {children}
    </AuthContext.Provider>
  );
}

export function useAuth() {
  return useContext(AuthContext);
}

处理登录成功后的重定向

登录成功后重定向用户到目标页面或默认首页。

function LoginForm() {
  const { login } = useAuth();
  const navigate = useNavigate();
  const [error, setError] = useState('');

  const handleSubmit = async (e) => {
    e.preventDefault();
    try {
      await login(formData);
      navigate('/dashboard');
    } catch (err) {
      setError('登录失败,请检查用户名和密码');
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      {error && <div className="error">{error}</div>}
      {/* 表单内容 */}
    </form>
  );
}

添加表单验证

在提交前验证表单数据,确保用户名和密码符合要求。

react项目登录功能实现

const validateForm = () => {
  const errors = {};
  if (!formData.username) errors.username = '用户名不能为空';
  if (!formData.password) errors.password = '密码不能为空';
  return errors;
};

const handleSubmit = (e) => {
  e.preventDefault();
  const errors = validateForm();
  if (Object.keys(errors).length > 0) {
    setFormErrors(errors);
    return;
  }
  // 提交逻辑
};

标签: 功能项目
分享给朋友:

相关文章

uniapp项目源码

uniapp项目源码

Uniapp 项目源码获取方式 官方示例与模板 Uniapp 官方提供了多个开源项目模板和示例,涵盖基础框架、UI组件库等。可通过以下途径获取: 在 DCloud 插件市场 搜索“uniapp模…

h5实现点击复制功能

h5实现点击复制功能

使用document.execCommand方法(兼容旧浏览器) 通过document.execCommand('copy')实现复制功能,需先选中文本内容。创建一个隐藏的textarea或input…

vue实现tab功能

vue实现tab功能

Vue实现Tab功能的方法 使用动态组件和v-for指令 在Vue中实现Tab功能可以通过动态组件和v-for指令结合完成。定义一个包含tab标题和对应内容的数组,使用v-for渲染tab标题,并通过…

vue项目实现流程

vue项目实现流程

Vue项目实现流程 项目初始化 使用Vue CLI或Vite创建项目基础结构。Vue CLI适合传统项目,Vite适合现代轻量级应用。安装Node.js环境后,通过命令行工具执行创建命令。 npm…

vue修改功能实现

vue修改功能实现

Vue 修改功能的实现方法 修改功能是 CRUD 操作中的重要部分,在 Vue 中可以通过多种方式实现。以下是几种常见的实现方案: 数据绑定与表单处理 使用 v-model 实现双向数据绑定,快速获…

php实现评论功能

php实现评论功能

数据库设计 创建评论表(示例结构): CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id`…