当前位置: 首页 > wzjs >正文

浙江 外贸网站建设线上推广如何引流

浙江 外贸网站建设,线上推广如何引流,做网站背景步骤,郑州模板网站建设React通用登录/注销功能实现方案(基于shadcn/ui) 一、功能需求分析二、通用功能封装1. 通用登录表单组件2. 认证Hook封装 三、功能使用示例1. 登录页面实现2. 用户菜单实现 四、路由保护实现五、方案优势 一、功能需求分析 需要实现以下核心功能&#x…

React通用登录/注销功能实现方案(基于shadcn/ui)

    • 一、功能需求分析
    • 二、通用功能封装
      • 1. 通用登录表单组件
      • 2. 认证Hook封装
    • 三、功能使用示例
      • 1. 登录页面实现
      • 2. 用户菜单实现
    • 四、路由保护实现
    • 五、方案优势

一、功能需求分析

需要实现以下核心功能:

  1. 登录表单组件
  2. 登录状态管理
  3. 用户注销功能
  4. 路由权限控制

二、通用功能封装

1. 通用登录表单组件

// lib/components/auth-form.tsx
import { cn } from "@/lib/utils"
import { Button } from "@/components/ui/button"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { FormEvent, ReactNode } from "react"interface AuthFormProps {className?: stringtitle: stringdescription?: stringerror?: stringfields: FormField[]submitText?: stringonSubmit: (data: Record<string, string>) => voidchildren?: ReactNode
}export type FormField = {name: stringlabel: stringtype?: stringplaceholder?: stringrequired?: boolean
}export function AuthForm({className,title,description,error,fields,submitText = "Submit",onSubmit,children
}: AuthFormProps) {const handleSubmit = (e: FormEvent<HTMLFormElement>) => {e.preventDefault()const formData = new FormData(e.currentTarget)const data = Object.fromEntries(formData.entries())onSubmit(Object.fromEntries(Object.entries(data).map(([key, value]) => [key, value.toString()])))}return (<div className={cn("flex flex-col gap-6", className)}><Card><CardHeader><CardTitle>{title}</CardTitle>{description && <CardDescription>{description</CardDescription>}</CardHeader><CardContent><form onSubmit={handleSubmit}><div className="flex flex-col gap-6">{error && (<div className="text-sm font-medium text-destructive">{error}</div>)}{fields.map((field) => (<div key={field.name} className="grid gap-3"><Label htmlFor={field.name}>{field.label}</Label><Inputid={field.name}name={field.name}type={field.type || "text"}required={field.required !== false}placeholder={field.placeholder}/></div>))}<Button type="submit" className="w-full">{submitText}</Button></div></form>{children}</CardContent></Card></div>)
}

2. 认证Hook封装

// lib/hooks/use-auth.ts
import { useState } from 'react'
import { useNavigate } from 'react-router-dom'export const useAuth = () => {const [error, setError] = useState('')const navigate = useNavigate()const login = async (credentials: Record<string, string>) => {try {// 示例验证逻辑,实际替换为API调用if (credentials.username === 'admin' && credentials.password === '123456') {localStorage.setItem('isAuthenticated', 'true')navigate('/')} else {setError('Invalid credentials')}} catch (err) {setError('Login failed')}}const logout = () => {localStorage.removeItem('isAuthenticated')navigate('/login')}return { login, logout, error }
}

三、功能使用示例

1. 登录页面实现

// app/login/page.tsx
import { AuthForm } from "@/lib/components/auth-form"
import { useAuth } from "@/lib/hooks/use-auth"export default function LoginPage() {const { login, error } = useAuth()const loginFields = [{ name: "username", label: "Username", required: true },{ name: "password", label: "Password", type: "password", required: true }]return (<div className="flex h-screen items-center justify-center bg-gray-100 p-4"><div className="w-full max-w-md"><AuthFormtitle="Login to System"description="Enter your credentials to continue"fields={loginFields}onSubmit={login}error={error}submitText="Sign In"/></div></div>)
}

2. 用户菜单实现

// components/nav-user.tsx
import { useAuth } from "@/lib/hooks/use-auth"export function NavUser() {const { logout } = useAuth()return (<DropdownMenu>{/* 其他菜单项 */}<DropdownMenuItem onClick={logout}><LogOut />Log out</DropdownMenuItem></DropdownMenu>)
}

四、路由保护实现

// router.ts
import { Navigate } from 'react-router-dom'const PrivateRoute = ({ children }: { children: JSX.Element }) => {const isAuthenticated = localStorage.getItem('isAuthenticated')return isAuthenticated ? children : <Navigate to="/login" replace />
}

五、方案优势

  1. 高度可配置:表单字段、验证逻辑均可自定义
  2. 类型安全:完善的TypeScript类型定义
  3. UI解耦:业务逻辑与UI组件分离
  4. 易于扩展:支持添加注册/找回密码等衍生功能
http://www.dtcms.com/wzjs/79449.html

相关文章:

  • wordpress文章乱码seo搜索引擎优化技术教程
  • 手机网站怎么开发工具品牌宣传策略有哪些
  • 南昌网站建设搜q.479185700宿州百度seo排名软件
  • 网站表格怎么做惠州市seo广告优化营销工具
  • 宁波江北建设局网站农业推广
  • 网站开发网址手机制作网页
  • 企业网站建立制作汕头seo优化公司
  • 南通市区有哪几家做网站的百度关键词价格怎么查询
  • 新乡营销网站建设公司安卓系统优化app
  • 网站上传连接失败的原因百度seo推广优化
  • 广州做商城网站网站推广软件ky99
  • 网站开发培训 价格怎么申请自己的网络平台
  • 中国科技成就图片福建seo顾问
  • 药业做网站的网站目标分析seo搜索引擎优化是做什么的
  • 建站abc网站破解武汉网络推广自然排名
  • 网站做适配手机要多久浏览器下载大全
  • 免费网站开发软件结构优化设计
  • 导购类网站如何做会员互动线上推广方式
  • 网站用 做有什么好处新闻联播直播 今天
  • 个体户做网站免费推广软件平台
  • 做ic的电子网站有哪些seo分析seo诊断
  • 阳江网红酒店长沙企业seo服务
  • 网站建设五大定位百度热门搜索排行榜
  • 公益网站 做公益赚钱东莞企业网站推广
  • 互联网兼职做网站维护搜索引擎大全网站
  • 网页设计培训哪好电商seo优化
  • 大型网站开发流程和步骤无锡网站优化公司
  • 教做布艺的网站疫情最新消息
  • 备案网站名称有什么用天津seo网站管理
  • 做视频网站被判刑个人主页网页设计