当前位置:首页 > 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;
  }
  // 提交逻辑
};

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

相关文章

vue实现倒计时功能

vue实现倒计时功能

vue实现倒计时功能 在Vue中实现倒计时功能可以通过多种方式完成,以下是几种常见的方法: 方法一:使用setInterval和clearInterval 创建一个倒计时组件,利用setInter…

vue实现倍速播放功能

vue实现倍速播放功能

实现倍速播放功能的方法 在Vue中实现倍速播放功能通常涉及HTML5的<video>元素或第三方播放器库(如video.js)的API调用。以下是具体实现方式: 使用原生HTML5 vi…

vue前端实现打印功能

vue前端实现打印功能

使用Vue实现前端打印功能 使用window.print()方法 Vue中可以直接调用浏览器的window.print()方法实现打印功能。这种方法简单快捷,适用于打印整个页面或特定区域。 meth…

uniapp项目实战

uniapp项目实战

创建UniApp项目 通过HBuilderX新建项目,选择UniApp模板,填写项目名称和存储路径。根据需求选择默认模板或自定义配置,如Vue3版本支持。 配置基础环境 在manifest.js…

react项目如何启动

react项目如何启动

启动React项目的步骤 确保已安装Node.js(建议版本12以上)和npm/yarn。可通过以下命令检查版本: node -v npm -v 全局安装create-react-app脚手架工具(…

react如何接入项目

react如何接入项目

创建React项目 使用create-react-app快速初始化项目: npx create-react-app my-app cd my-app npm start 适用于全新项目,自动配置…