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

安化网站建设怎样建个人网站 步骤

安化网站建设,怎样建个人网站 步骤,花色98堂新网名内容与理念,关于企业网站建设React Hooks的一些使用经验以及技巧 hook通用规则:一.useState二.useEffect三.useRef四.useMemo 最近一段时间都在使用React Hooks,简单记录下使用技巧,比较常用的hook有:useState、useEffect、useRef、useMemo、useCallback… hook通用规则…

React Hooks的一些使用经验以及技巧

  • hook通用规则:
    • 一.useState
    • 二.useEffect
    • 三.useRef
    • 四.useMemo

最近一段时间都在使用React Hooks,简单记录下使用技巧,比较常用的hook有:useState、useEffect、useRef、useMemo、useCallback…

hook通用规则:

  1. 只在 React 函数中调用 Hook。
  2. 不要在循环、条件或嵌套函数中调用 Hook。

一.useState

// name 和 setName 名称自己定义
const [name,setName] = useState('')// 更改 name 为 ‘aquan’
const onClick = () = >{setName('aquan')
}

useState是用来存储状态的hook,其中 name 表示变量名称,setName表示改变state的函数,useState接受一个参数,这个参数为 state 的初始化值。

用法是比较简单的,但是需要注意的点有
1. 在 setName 后立马打印 name 是获取不到最新的值的,因为 useState 是异步的,如果想要获取新的值之后做什么操作,可以参考下面的 useEffect。
2. 调用多次 setName 只会以最后一次为准,例如:

const onClick = () = >{setName('aquan')setName('quan')// 最后 name 的值为 quan
}

如果你的值基于上一次更新,setName 可以接受一个函数,参数会有上一次更新的值

const onClick = () = >{setName('aquan')setName((val)=>val+'-demo')// 最后 name 的值为 aquan-demo
}

3.每次调用 setName 会导致组件重新更新一次,为了优化体验,有时候尽量把多个setState改成一个,避免多次渲染

const onClick = () = >{setName('aquan')setAge(18)// 会导致组件刷新两次,在setName完成后刷新一次,在setAge完成后又刷新一次// 可以改为setData({name:'aquan',age:18})
}

二.useEffect

useEffect可以让你在一些情况下,执行自己的想添加的操作,例如:监听state变化时,组件加载完成时,组件销毁时。
useEffect接受两个参数,第一个参数为函数,可以传入用户想要执行的操作,第二个参数为监听项,但第二个参数变化时,会执行用户传入的函数
1.监听state变化时(useEffect第二个参数有值,当然因为是数组也可以传多个state监听)

useEffect(()=>{// state初始化的时候也会进来一次console.log(name)
},[name])

这个一般用于,在某个值变化的时候执行自己的操作,例如:有一个搜索功能,有好几个下拉框,在用户选择下拉框的时候,你希望能请求一下数据查询

const [query,setQuery] = useState({})const handleChangeSelect = () => {setQuery({level:1})// 如果你有多个参数,建议改为setQuery((val)=>{...val,level:1})// 或setQuery({...query,level:1})// 避免更改覆盖了之前query的除开level其他值
}const getData = (params) => {// 根据参数请求接口重新查询数据
}useEffect(()=>{getData(query)
},[query])

2.组件加载完成时(第二个参数为空数组)

useEffect(()=>{// 组件加载完成时,一般用于组件刚进来获取数据,调用接口getData()
},[])

3.组件被销毁时(return了一个函数)

useEffect(()=>{return  () => {// 组件被销毁时调用 一般用于清除定时器或者销毁前的一些操作console.log('组件销毁')}
},[])

三.useRef

useRef一般用于获取dom元素

const testRef = useRef()// dom元素
<div ref={testRef} id='test'>测试文本</div>// 此时testRef 等于,可以直接拿到dom元素
testRef.current  =  document.getElementById('test')

有时候也可以用作变量存储,或者存定时器,用名称.current去赋值和获取

const timerRef = useRef()useEffect(()=>{
// 组件加载完成,设置定时器timerRef.current = setInterval(()=>{console.log('时间正在流逝')},[1000])return ()=>{//组件销毁时清除定时器clearInterval(timer.current);}
},[])

注意: 使用useRef当做变量存储的话,变量如果发生更新,组件不会重新渲染,所以一般还是用useState存储状态,除非个别情况下用第三方插件可能导致useState拿不到新更新的值。

四.useMemo

useMemo涉及到性能优化这块了,可以让一些变量避免重复声明,同样接受两个参数,第一个是回调函数,第二个是数组

const demo = () => {const [count, setCount] = useState(0);const [status, setStatus] = useState(0);// 每次组件更新都会重新声明一次,点击改变状态也会导致重新声明const isBigNum =  count > 1// 使用useMemo可以让变量只在加载完成时更新,以及监听对象更新时重新声明const isBigNum = useMemo(()=> count > 1,[count])const handleOnClick = ()=>{setCount(val=>val+1)}const handleOnChangeStatus = ()=>{setStatus(!status)}return (<div><div onClick={handleOnClick}> 点我+1 </div><div onClick={handleOnChangeStatus}> 点我改变状态 </div></div>);
};export default demo;
http://www.dtcms.com/a/486113.html

相关文章:

  • 并查集-547.省份的数量-力扣(LeetCode)
  • 生命周期全景图:从componentDidMount到getSnapshotBeforeUpdate
  • p2p做网站plc编程入门基础知识
  • 学院个人信息|基于SprinBoot+vue的学院个人信息管理系统(源码+数据库+文档)
  • Unity AB包加载与依赖管理全解析
  • 基于Springboot的游戏网站的设计与实现45nuv3l8(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 深入理解 Vue.js 原理
  • 基于bert-base-chinese的外卖评论情绪分类项目
  • OpenSSL EVP编程介绍
  • 网站服务器组建中国国际贸易网站
  • 上新!功夫系列高通量DPU卡 CONFLUX®-2200P 全新升级,带宽升 40% IOPS提60%,赋能多业务场景。
  • Spring Boot 3零基础教程,properties文件中配置和类的属性绑定,笔记14
  • 以数据智能重构 OTC 连锁增长逻辑,覆盖网络与合作生态双维赛跑
  • 【推荐100个unity插件】基于节点的程序化无限地图生成器 —— MapMagic 2
  • 71_基于深度学习的布料瑕疵检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 工控机做网站服务器网络模块
  • Mac——文件夹压缩的简便方法
  • Playwright自动化实战一
  • 电商网站开发面临的技术问题做seo网站诊断书怎么做
  • 【Qt】QTableWidget 自定义排序功能实现
  • WPF 疑点汇总2.HorizontalAlignment和 HorizontalContentAlignment
  • 【Qt】3.认识 Qt Creator 界面
  • 垂直网站建设付费小说网站怎么做
  • PDFBox - PDDocument 与 byte 数组、PDF 加密
  • 【Pytorch】分类问题交叉熵
  • 如何轻松删除 realme 手机中的联系人
  • Altium Designer怎么制作自己的集成库?AD如何制作自己的原理图库和封装库并打包生成库文件?AD集成库制作好后如何使用丨AD集成库使用方法
  • Jackson是什么
  • 代码实例:Python 爬虫抓取与解析 JSON 数据
  • 襄阳建设网站首页百度知识营销