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

温州建设信息网站深圳的深圳的网站建设公司

温州建设信息网站,深圳的深圳的网站建设公司,现在网络推广哪家好,ai可以用来做网站吗React Hooks 常见错误 前言 本片文章主要是在写react hooks的时候#xff0c;遇到的常见错误的写法#xff0c;和错误。也是一个对只是的巩固和总结。 错误一 上代码#xff1a;正确写法 function TestReactHooksError() {const [test, setTest] useState(test);useEff…React Hooks 常见错误 前言 本片文章主要是在写react hooks的时候遇到的常见错误的写法和错误。也是一个对只是的巩固和总结。 错误一 上代码正确写法 function TestReactHooksError() {const [test, setTest] useState(test);useEffect(() {if(test) {console.log(test)}}, [test]);return (divbutton onClick{()setTest(test 1)}{test}click/button/div); } export default TestReactHooksError解析 功能点击按钮按钮文案改动并且控制台打印文案结果。 稍作改动 function TestReactHooksError() {const [test, setTest] useState(test);if (test) {useEffect(() {console.log(test)}, [test]);}return (divbutton onClick{() setTest(test 1)}{test}click/button/div); } export default TestReactHooksError可以看到报错了 搜狗翻译 React钩子“useEffect”被有条件地调用。React挂钩必须在每个组件渲染中以完全相同的顺序调用 正常翻译 就是钩子函数必须按顺序执行因为底层是按顺序执行的所以如果加入判断的话可能有不可预知的错误。 错误二 上代码正确写法 function TestReactHooksError() {const [test, setTest] useState([1, 2, 3, 4, 5]);useEffect(() {consoleLog()}, []);const consoleLog (value) {for (let i 0, len test.length; i len; i) {console.log(test[i])}}return (div{test.map((item) {return span key{item}{item}/span})}/div); } export default TestReactHooksError解析 功能渲染列表并且控制台打印结果。 稍作改动 function TestReactHooksError() {const [test, setTest] useState([1,2,3,4,5]);for (let i0, len test.length; i len; i) {useEffect(() {console.log(test[i])}, [test[i]]);}return (div{test.map((item){return span key{item}{item}/span})}/div); } export default TestReactHooksError报错 可以看到结果都正常打印了但是报错了。 搜狗翻译 React挂钩“useEffect”可以执行多次。可能是因为它是在循环中调用的。React挂钩必须在每个组件渲染中以完全相同的顺序调用 正常翻译 不能在循环中使用hooks因为还是可能会导致执行顺序错误导致结果错误。 错误三 上代码 正确写法 function TestReactHooksError() {const [testState, setTestState] useState(testState)const clickState () {console.log(testState)}return (divbutton onClick{()clickState()}click/button/div); } export default TestReactHooksError解析 功能点击按钮控制台打印结果。 稍作改动 function TestReactHooksError() {const clickState () {const [testState, setTestState] useState(testState)console.log(testState)}return (divbutton onClick{()clickState()}click/button/div); } export default TestReactHooksError报错 搜狗翻译 React挂钩“useState”在函数“clickState”中调用该函数既不是React函数组件也不是自定义React挂钩函数。React组件名称必须以大写字母开头。React挂钩名称必须以单词“use”开头 正常翻译 这个翻译的很明白就是不能在普通函数中使用因为react不会理解它是一个组件或者是自定义hooks。 错误四 上代码 错误写法 class MyComponent extends React.Component {constructor(props) {super(props);this.state {testState: testState,};}useEffect(() {console.log(this.state.testState)}, [this.state.testState]);render() {return (divpYou clicked {this.state.testState} times/pbutton onClick{() this.setState({ testState: this.state.testState 1 })}Click/button/div);} }报错 报错语法格式错误。所以不能混合使用 错误五 正确的写法 function TestReactHooksError() {const [testState, setTestState] useState(testState)function clickState() {console.log(testState)}return (divbutton onClick{() setTestState(testState 1)}{testState}/buttonbutton onClick{() clickState()}click/button/div); } export default TestReactHooksError稍作修改 function TestReactHooksError() {const [testState, setTestState] useState(testState)function clickState() {console.log(testState)}return (divbutton onClick{() setTestState(testState 1)}{testState}/buttonbutton onClick{clickState}click/button/div); } export default TestReactHooksError在 JSX 的事件处理程序中调用函数时应该传递函数本身而不是函数的返回值。改为 onClick{() handleClick()} 或者将 handleClick 函数定义在组件外部并将其作为 prop 传递给组件。由于当前的写法每次渲染都会创建一个新的函数和事件处理程序因此会导致浪费和性能问题。 注意 当然在最新的版本中不会有这个问题因为React 已经对函数事件处理程序进行了自动绑定所以在最新版本中不会出现这个问题。这是因为最新版本的 React 使用了异步渲染机制将多次渲染时创建的函数缓存起来进行重用从而避免了性能问题。 错误六 使用useEffect时没有传入依赖项这可能会导致无限制地执行useEffect当然如果你就是为了重复执行可以跳过这个。 正确写法 function TestReactHooksError() {const [test, setTest] useState(test);useEffect(() {console.log(test)}, [test]);return (divbutton onClick{()setTest(test 1)}{test}click/button/div); } export default TestReactHooksError稍作修改 function TestReactHooksError() {const [test, setTest] useState(test);useEffect(() {console.log(test)});return (divbutton onClick{()setTest(test 1)}{test}click/button/div); } export default TestReactHooksError修改之后如果之后再加入其他按钮渲染数据当其他数据变化时还是会执行useEffect所以需要正确的添加依赖项。 错误七 定时器 上代码正确的写法 分别使用setTimeout和setInterval function TestReactHooksError() {const [timer, setTimer] useState(0);const [timerS, setTimerS] useState(0);useEffect(() {setTimeout(() {setTimer(timer 1)}, 1000)}, [timer]);useEffect(() {setInterval(() {setTimerS(timerS timerS 1)}, 1000)}, []);return (div{timer}-{timerS}/div); } export default TestReactHooksError但是这样写有一个问题如果仔细看页面计时显示会发现两个时间有偏差。setTimeout会慢一些但是这也不难分析因为setTimeout 和 setInterval 的执行方式是不同的。setTimeout 在每次计时器更新时都会重新创建一个新的计时器而 setInterval 只会在组件挂载时创建一个计时器。因此setInterval 的计时器会一直运行而 setTimeout 的计时器则会受到上一个计时器执行时间的影响可能会出现延迟。另外由于 setTimeout 是在依赖数组中的 timer 更新时执行的当 timer 发生变化时会重新创建一个新的计时器这可能会导致计时器的执行时间出现偏差。 说简单点就是setInterval 每次只是在设定的时间后马上执行而setTimeout需要依赖数据变化并且每次都重新创建所以会慢一些 稍作修改 错误的写法 useEffect(() {setInterval(() {setTimerS(timerS 1)console.log(timerS)}, 1000) }, [timerS]);可以看到页面显示抽搐的时间 总结 先这么多文章还会更新。。。 如有问题欢迎指出感谢
http://www.tj-hxxt.cn/news/140588.html

相关文章:

  • 长春制作门户网站的公司搭建 网站 模版
  • 房产网站建设产品设计网站官网
  • 专门做水生植物销售网站杭州萧山区抖音seo排行榜
  • 网站定制公司排行榜seo索引擎优化
  • 制作网站监控推荐莆田网站建设开发
  • 初中网站建设网站建设的实施方案
  • 攀枝花仁和住房和城乡建设局网站网站建设费用分类
  • 网站开发参考文献期刊学网站设计
  • 溧水区住房和城乡建设厅网站哪里做网站比较快
  • 旅游门户网站建设项目招标佛山网站设计制作公司
  • 做儿童文学有哪些的网站seo优化排名易下拉用法
  • 自己做的网站如何兼容莱芜金点子最新招聘
  • 南充网站建设工作室有阿里云服务器 怎么做网站
  • 惠城中山网站建设四合一小说网站搭建教程
  • 免费建个人手机网站网站建设的资金
  • 网站开发前端工程师建好的网站怎么用
  • 常德投诉网站秦皇岛网站建设找汉狮
  • 山东鲁桥建设有限公司网站中国核工业二四建设有限公司
  • 微网站建设报价表网络营销的特点包括什么
  • 网站建设968WordPress的插件怎么保存
  • 网站不用域名可以吗石家庄建设路网站
  • 金融交易网站开发wordpress添加媒体没反应
  • 域名站长工具创办公司需要多少资金
  • 活动网站网易云播放器做网站播放
  • 在线网页代理网址seo网络优化公司哪家好
  • 企业培训机构网站源码做网站哪个公司最好
  • 西安网站开发定制制作清河做网站哪家好
  • 石家庄做公司网站创意网站开发
  • 手机网站开发成本哈尔滨住房和城乡建设局
  • 网站设计企数字广东公司面试严吗