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

企业网站建设免费网站搭建一般要多少钱

企业网站建设免费,网站搭建一般要多少钱,新闻专业为啥学网页制作,做网站没有学历的人会吗1.前端页面文件夹 路由功能 前端web目录下 创建pages 文件夹 创建Home.jsx 首页 SignUpPage 注册 LoginPage 登录 ProfilePage 个人资料 SettingPage 各个页面简单实现一下 内容如下 const HomePage () > {return (<div>HomePage</div>)}export defaul…

1.前端页面文件夹  路由功能 

  前端web目录下 创建pages 文件夹 创建Home.jsx   首页  SignUpPage 注册 LoginPage 登录 

  ProfilePage 个人资料  SettingPage

 各个页面简单实现一下 内容如下

const HomePage = () => {return (<div>HomePage</div>)}export default HomePage

 在main.js 引入  BrowserRouter

import { BrowserRouter } from 'react-router-dom' 

用BrowserRouter 把App 组件包裹 提供给全局路由功能

import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.jsx'import { BrowserRouter } from 'react-router-dom'
createRoot(document.getElementById('root')).render(<StrictMode><BrowserRouter><App /></BrowserRouter></StrictMode>,
)

 App.jsx 内容  如下  


import HomePage from '@/pages/HomePage'
import SignUpPage from './pages/SignUpPage'
import ProfilePage from './pages/ProfilePage'
import LoginPage from './pages/LoginPage'
import SettingsPage from './pages/SettingPage'import { Routes, Route} from 'react-router-dom'
const App = () => {return (<div><Routes><Route path="/" element={<HomePage />} /> <Route path="/signup" element={<SignUpPage />} /> <Route path="/login" element={<LoginPage /> } /> <Route path="/settings" element={<SettingsPage /> } /> <Route path="/profile" element={<ProfilePage />} /> </Routes></div>)
}export default App

  1.测试 路由功能  首页跳转到注册 再从注册跳转到首页

 HomePage.jsx 内容如下


import {Link} from "react-router-dom"
const HomePage = () => {return (<div><p className="text-red-500">首页</p><Link to="/signup">跳转注册页面</Link></div>)}export default HomePage

注册页面类似 点击跳转可以实现路由切换  

 

2.注册页面

 注册页面分2部分 我们先实现左侧功能 

import { useState } from "react";
import { MessageSquare,User,Mail,Lock,Eye, EyeOff,Loader2} from "lucide-react";
import {Link} from "react-router-dom"const SignUpPage = () => {const [showPassword, setShowPassword] = useState(false);const [formData, setFormData] = useState({userName: "",email: "",password: "",})const {signup,isSigningUp} = useAuthStore();const validateForm = () => {}const handleSubmit = (e) => {console.log(e)e.preventDefault();}return (<div className="min-h-screen grid lg:grid-cols-2">{/*left side*/}<div className="flex flex-col justify-center items-center p-6 sm:p-12"><div className="w-full mt-10">{/* logo */}<div className="text-center mb-8"><div className="flex flex-col items-center gap-2 group"><div className="size-12 rounded-xl bg-primary/10 flex items-center justify-centergroup-hover:bg-primary/20 transition-colors"><MessageSquare className="size-6 text-primary"></MessageSquare></div><h1 className="text-2xl font-bold mt-2">账号注册</h1><p className="text-base-content/60">从免费创建账号开始</p></div></div>{/* form */}<form onSubmit={handleSubmit} className="space-y-6"><div className="form-control"><label className="label"><span className="label-text font-medium">用户名</span></label>{/* 输入框 */}<div className="relative"><div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"><User className="size-5 text-base-content/40" /></div><input type="text"className={`input input-bordered w-full pl-10`}placeholder="请输入用户名"value={formData.userName}onChange={(e)=> setFormData({...formData,userName:e.target.value})}></input></div></div><div className="form-control"><label className="label"><span className="label-text font-medium">邮箱</span></label>{/* 输入框 */}<div className="relative"><div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"><Mail className="size-5 text-base-content/40" /></div><input type="text"className={`input input-bordered w-full pl-10`}placeholder="请输入邮箱地址"value={formData.email}onChange={(e)=> setFormData({...formData,email:e.target.value})}></input></div></div><div className="form-control"><label className="label"><span className="label-text font-medium">密码</span></label>{/* 输入框 */}<div className="relative"><div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"><Lock className="size-5 text-base-content/40" /></div><input type={showPassword ? "text" : "password"}className={`input input-bordered w-full pl-10`}placeholder="请输入密码"value={formData.password}onChange={(e)=> setFormData({...formData,password:e.target.value})}></input><buttontype="button"className="absolute inset-y-0 right-0 pr-3 flex items-center"onClick={()=> setShowPassword(!showPassword)}>{showPassword ? (<EyeOff className="size-5 text-base-content/40" />) : (<Eye className="size-5 text-base-content/40" />)}</button></div></div><button type="submit"className="btn btn-primary w-full"disabled={isSigningUp}>{isSigningUp ? (<><Loader2 className="size-5 animate-spin"/>Loading...</>):("创建账户")}</button></form><div className="text-center"><p className="text-base-content/60">已有账号?{""}<Link to="/login" className="link link-primary">去登录</Link></p></div></div></div>{/* right side */}</div>)
}export default SignUpPage

效果

  1.引入axios 

        前端http请求 我们通axios实现  新建lib文件夹 创建axios.js

import axios from 'axios';const axiosInstance = axios.create({baseURL: 'http://localhost:3000/api',  //后端服务地址withCredentials: true,
})export default axiosInstance;

  2.引入zustand 

     我们全局所有接口请求 状态 数据都用zustand管理 类似 pinia vuex redux等

  新建store文件夹 创建userAuthStore.js   主要实现用户登录 注册 认证功能

import {create} from 'zustand'
import axiosInstance from '../lib/axios'
import toast from 'react-hot-toast'// 创建一个auth store
export const useAuthStore = create((set,get) => ({authUser:null, // 用户信息isSigningUp: false, // 是否登录isLoginningIn: false, // 是否登录中signup: async(data) => {set({isSigningUp: true})try {const res = await axiosInstance.post('/auth/signup', data)toast.success("注册成功")set({authUser: res.data})} catch (error) {console.log("useAuthStore signup error",error.message)set({isSigningUp: true})} finally {set({isSigningUp: false})}},login: async(data) => {set({isLoginningIn: true})try {const res = await axiosInstance.post('/auth/login', data)set({authUser: res.data})toast.success("登录成功")} catch (error) {toast.error(error.response.data.message)} finally{set({isLoginningIn: false})}},logout: async() => {try {await axiosInstance.post('/auth/logout')set({authUser: null})toast.success("退出成功")} catch (error) {console.log("useAuthStore logout error",error.message)}}
}))

在signupPage 引入useAuthStore 更新如下代码 

const {signup,isSigningUp} = useAuthStore();const validateForm = () => {if(!formData.userName.trim()) return toast.error("请输入用户名");// 邮箱正则验证if(!/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(formData.email)) return toast.error("请输入正确的邮箱");if(formData.password.length < 6) return toast.error("请输入至少6位的密码");return true}const handleSubmit = (e) => {console.log(e)e.preventDefault();const success = validateForm();if(success) signup(formData);}

注册按钮加个loading的状态 

<button type="submit"className="btn btn-primary w-full"disabled={isSigningUp}>{isSigningUp ? (<><Loader2 className="size-5 animate-spin"/>Loading...</>):("创建账户")}</button>

3.测试注册功能

看提示根据浏览器同源策略  前后端端口不一样 跨域了

所以我们要去server端配置下跨域 配置很简单

在server index.js中引入cors  做如下配置

import cors from 'cors'

// 跨域配置

// app.options('*', cors()) // include before other routes

app.use(cors({

    origin:'http://localhost:5173', // 我们前端的地址

    credentials: true

  }))

然后再去前端发送注册请求 

提示注册成功!!

去数据库验证结果 也有我们刚注册的用户

这篇 就这样把 不写登录功能了 篇幅有点多 有问题欢迎评论留言!!喜欢的来个3连 谢谢!! 

http://www.dtcms.com/wzjs/173836.html

相关文章:

  • 珠海建设局网站首页免费公司网站建站
  • 做视频网站用什么系统网站提交工具
  • 网站建设平台的比较2022年十大网络流行语发布
  • 企业怎么建网站seo概念的理解
  • 税务网站建设 目标搜索引擎环境优化
  • 中国建设信用卡网站优化大师绿色版
  • 个人网站需要多少钱关键词研究工具
  • 用家庭宽带做网站百度推广怎么做最好
  • python做网站赚钱安卓优化大师历史版本
  • 郑州建网站的公司微信指数怎么看
  • 德州市网站建设优秀的营销案例
  • 国外做储物的网站网络营销以什么为中心
  • 儋州个人建站哪家好百度认证号码平台
  • 设计专业笔记本电脑推荐百度seo泛解析代发排名
  • 郑州建设局网站百度的广告推广需要多少费用
  • 北京建网江门搜狗网站推广优化
  • 资中移动网站建设seo外包优化公司
  • 广西崇左市住房和城乡建设局网站软文标题例子
  • 网站设计公司 上百度认证怎么认证
  • 苏州妙笔网络科技有限公司电商seo是什么
  • 网站主机ip是独立的好一键建站
  • 做dj网站用什么建站系统比较好网络培训课程
  • 做物品租赁网站网站设计制作在哪里找
  • 吴江网站建设哪家好谷歌seo推广服务
  • 域名备案与网站不一致seo刷关键词排名优化
  • 自己做网站好还是凡科关键词排名监控批量查询
  • 网站怎么做区域性优化网站排名软件推荐
  • 玛伊网站做兼职加入要多少钱网站百度权重
  • 关于网站建设live2500优化模型
  • 网页设计的首页如何设计官网进一步优化落实