当前位置:首页 > 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 实现拨号功能 使用 tel: 协议实现基础拨号 在 Vue 中可以通过 HTML 的 <a> 标签结合 tel: 协议实现拨号功能。这种方式适用于移动端浏览器,点击后会直接调用系统…

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…

php购物车功能的实现

php购物车功能的实现

实现购物车功能的基本方法 使用PHP实现购物车功能可以通过会话(Session)或数据库存储购物车数据。以下是两种常见方法的详细说明。 使用Session存储购物车数据 PHP的$_SESSION可…

elementui项目

elementui项目

ElementUI 项目搭建与使用指南 环境准备 确保已安装 Node.js(建议版本 14+)和 npm/yarn。 创建 Vue 项目 通过 Vue CLI 快速初始化项目: vue…

vue实现退出功能

vue实现退出功能

Vue 实现退出功能的方法 在 Vue 中实现退出功能通常涉及清除用户登录状态、跳转登录页等操作。以下是几种常见的实现方式: 清除登录状态并跳转 使用 Vue Router 进行页面跳转,同时清除本…

vue 项目实现websocket

vue 项目实现websocket

安装依赖 在Vue项目中,使用WebSocket通常不需要额外安装依赖,因为浏览器原生支持WebSocket API。如果需要更高级的功能或封装,可以安装vue-native-websocket或so…