hooks|hooks 系列九(hooks 实战)

快来加入我们吧! "小和山的菜鸟们",为前端开发者提供技术相关资讯以及系列基础文章。为更好的用户体验,请您移至我们官网小和山的菜鸟们 ( https://xhs-rookies.com/ ) 进行学习,及时获取最新文章。
"Code tailor" ,如果您对我们文章感兴趣、或是想提一些建议,微信关注 “小和山的菜鸟们” 公众号,与我们取的联系,您也可以在微信上观看我们的文章。每一个建议或是赞同都是对我们极大的鼓励!
实战案例:留言功能 【hooks|hooks 系列九(hooks 实战)】我们学完了 react-hooks 的一些基础内容,现在是我们的一个实战环节。
项目的功能与我们的 React 教程内容相似。具体可参考,React 系列 - 实战案例:增加登录
效果
我们要做的实战很简单,就是一个简单的留言功能。
效果图:

Login 页面
登录状态维护 如果我们登录成功之后,我们应该需要有一个用来存放信息的地方,为之后进行鉴权做准备,我们采用 localStorage 来做数据持久化处理。

this.props.history.replace('/home') window.localStorage.islogin = '1'

鉴权跳转到首页 我们需要在登录页面鉴权,我们让 login 页面在加载完成的时候判断,如果已经登录过了,那么我们就跳转到 home 主页,而要达到这样的效果就需要在 useEffect() 中,在页面展示之前进行判断。
useEffect(() => { let localStorage = window.localStorage if (localStorage.islogin === '1') { props.history.replace('/home') } })

登录页全部代码 用两个 useState() 来记录用户输入的账号密码,然后用于登录验证。
import React, { useEffect, useState } from 'react' import './login.css'function Login(props) { useEffect(() => { let localStorage = window.localStorage if (localStorage.islogin === '1') { props.history.replace('/home') } })const [username, setUsername] = useState('') const [password, setPassword] = useState('')return (欢迎来到XXX博客区
setUsername(e.target.value)} /> setPassword(e.target.value)} />handleLogin()}> 登录
)function handleLogin() { if (username && password) { props.history.replace('/home') window.localStorage.islogin = '1' alert('欢迎!') } else { alert('请输入用户名和密码!') } } }export default Login

Home 页面
import React, { useState } from 'react' import Comment from './comment' import checkRole from './checkRole' import './App.css'function App(props) { const [title, setTitle] = useState('Hello Hooks') const [desc, setDesc] = useState( '你知道有这么一个团队吗?他们怀揣梦想,艰苦奋斗,作为一群大学生菜鸟,放弃了平时娱乐的时间,选择一起学习,一起成长,将平时学习的笔记,心得总结为文章,目的很简单,希望可以帮助向他们一样的菜鸟们?你想了解更多吗?快搜索微信公众号:小和山的菜鸟们,加入他们吧!', ) const [comments, setComments] = useState([ { headPortrait: 'https://xhs-rookies.com/img/rookie-icon.png', time: new Date(2021, 4, 14, 21, 2, 30), nickName: '小菜鸟', detail: '这是一个即将推出系列文章的团队,我们一起期待他们的作品吧!', liked: true, likeNum: 23, }, ]) const [text, setText] = useState('')return (退出登录{title} {desc}评论
{comments.map((item, index) => { return ( changeLike(index)} {...item} /> ) })}hooks|hooks 系列九(hooks 实战)
文章图片