react hook问题记录(持续更新)

这篇具有很好参考价值的文章主要介绍了react hook问题记录(持续更新)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在使用react hook时候的一些问题记录

实际使用react hook的时候遇到的一些问题记录下来了,温故而知新。

问题1:useState已经重新赋值了,但是拿到的还是之前的值

例子1:界面上有个按钮,点击按钮界面上数值会增加1和2

const Test = () => {
   const [arr, setArr] = useState([0]);
   const handleClick = () => {
        Promise.resolve()
        	.then(() => {
        			setArr([...arr, 1)];
        	}
        	.then(() => {
        			setArr([...arr,  2)];
        	}
   }
   return (
   		<div>
   				{arr.toString()}
   				<button onClick={handleClick}>按钮</button>
   		</div>
   )
}

但是实际的结果是:
点击按钮,界面展示的是 0,2。跟预期需要展示的0,1,2不一样

例子2:点击按钮,执行三次setState,希望加3

const [count, setCount] = useState(0);

function handleClick() {
	setCount(count + 1);
	setCount(count + 1);
	setCount(count + 1);
}

但是实际的结果是:
点击按钮,界面展示的是1。跟预期需要展示的3不一样

原因
组件内部的任何函数,包括事件处理函数和Effect,都是从它被创建的那次渲染中被看到的,所以引用的值都是旧的(没找到原文出处,所以对“看到”这个词表示疑惑),理解为:因为界面没有重新渲染,执行的函数作用域还是旧的,所以里面值的引用还是之前的,所以即使多次执行,拿到的都是旧值,会导致界面展示出现异常。

直接在handleClick里面打印count,展示的还是上一次的值,不是最新的值,这个由react的调度机制决定的。

修改建议:利用state hook参数可以是回调函数进行解决;或者可以用ref,但是ref记录值不太灵活,所以还是建议回调函数文章来源地址https://www.toymoban.com/news/detail-791600.html

 setArr([...arr,  2)]; 
 
 --------------变更成-------------
 setArr((arr) => {
 	return [...arr, 2];
 }

到了这里,关于react hook问题记录(持续更新)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端常用的一些插件、UI框架、js库,样式库以及官方文档。【持续更新】

    1.1 文档地址 API文档 1.2 安装教程 1.下载安装 2.导入 2.1 文档地址 API文档 2.2 安装教程 1.下载安装 2.导入 3.1 文档地址 API文档 3.2 安装教程 1.下载安装 2.导入 3.安装遇到的问题 1)描述 ① 控制台报错 ② 终端报错 输出的内容都是 \\\"export xxx was not found in \\\'vue\\\' 2)解决 ① 先卸载 ya

    2024年02月03日
    浏览(33)
  • node.js系列-常见问题处理方案(持续更新)

    `` 浏览器中我们可以这样使用: node.js中实现方案 解决方案: 修改eslint配置文件 , 举个栗子:.eslintrc.js 使用方案 今天就写到这里啦~ 小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~ 大家要天天开心哦 欢迎大家指出文章需要改正之处~ 学无止境,合作共赢 欢迎路过

    2024年02月14日
    浏览(31)
  • 2023年最新前端面试题汇总大全二(含答案超详细,Vue,TypeScript,React,微信小程序,Webpack 汇总篇)-- 持续更新

    HTML篇 CSS篇 JS篇 Vue篇 TpeScript篇 React篇 微信小程序篇 前端面试题汇总大全(含答案超详细,HTML,JS,CSS汇总篇)-- 持续更新 1. 谈谈你对MVVM开发模式的理解? MVVM是一种简化用户界面的 实践驱动编程方式 。在当前主流的前后端分离的开发模式中,MVVM模式的优越性日益体现,相较

    2024年02月10日
    浏览(44)
  • Mars3D使用过程遇到的问题记录【持续更新】

    需要标注线面的角度heading 2022年6月23日 heading计算方式: https://turfjs.fenxianglu.cn/ 计算两点之间的角度 直接F12在控制台可以计算 eg: 加载gltf模型,模型是透明的,需要改为不透明 2022年6月23日 用文本编辑器打开.gltf,把里面的\\\"alphaMode\\\":\\\"BLEND\\\"改成\\\"alphaMode\\\":\\\"OPAQUE\\\" 模型旋转之后,标

    2024年02月08日
    浏览(43)
  • 2023年最新前端面试题汇总大全(含答案超详细,HTML,JS,CSS汇总篇)-- 持续更新

    专项练习–持续更新 HTML篇 CSS篇 JS篇 Vue篇 TypeScript篇 React篇 微信小程序篇 前端面试题汇总大全二(含答案超详细,Vue,TypeScript,React,微信小程序,Webpack 汇总篇)-- 持续更新 1.xhtml和html有什么区别 功能上 主要是 XHTML 可兼容各大浏览器、手机以及 PDA ,并且浏览器也能快速

    2024年02月12日
    浏览(47)
  • iOS问题记录 - Xcode 15安装低版本iOS模拟器(持续更新)

    最近新需求很多,项目改动很大,开发完成后想测一遍在低版本iOS系统上的兼容性,没想到低版本的iOS模拟器设备突然无法创建了。 在去年年底我研究过这个问题,写下了这篇文章iOS问题记录 - Xcode 14安装低版本iOS模拟器(持续更新),虽然当时没有完全解决,但暂时也够用

    2024年02月13日
    浏览(40)
  • iOS问题记录 - Xcode 14安装低版本iOS模拟器(持续更新)

    最近客服跟我反馈说,有一个用户打开老项目的iOS App闪退,我回顾了下这项目上次发布改了啥,发现就改了一些文本和链接,这就很奇怪。到后台查了下这个用户的设备信息和应用版本,用的是手机型号是iPhone X,系统版本是iOS 11.2,以及最新版的应用。 很长时间都忙着Flu

    2024年02月15日
    浏览(39)
  • 持续不断更新中... 自己整理的一些前端知识点以及前端面试题,包括vue2,vue3,js,ts,css,微信小程序等

    答: 在普通的前端项目工程中,在script标签中增加setup即可使用api 使用setup()钩子函数 答: 不要在计算属性中进行异步请求或者更改DOM 不要直接修改computed的值 区别: 计算属性值基于其响应式依赖被缓存,意思就是只要他之前的依赖不发生变化,那么调用他只会返回之前缓

    2024年02月11日
    浏览(39)
  • 【前端知识】React 基础巩固(四十二)——React Hooks的介绍

    Hook 是 React 16.8 的新增特性,它可以让我们在不编写class的情况下使用state以及其他的React特性(比如生命周期)。 class组件 VS 函数式组件: class的优势: class组件可以定义自己的state,用来保存组件自己内部的状态;而函数式组件不可以,因为函数每次调用都会产生新的临时

    2024年02月14日
    浏览(49)
  • 【前端知识】React 基础巩固(四十三)——Effect Hook

    Effect Hook 用来完成一些类似class中生命周期的功能。 在使用类组件时,不管是渲染、网路请求还是操作DOM,其逻辑和代码是杂糅在一起的。例如我们希望把计数器结果显示在标签上,在类组件中,我们通过生命周期进行实现,如下所示: 在函数组件中,我们可以利用useEffec

    2024年02月14日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包