react怎么绑定state(react纯函数组件setState更新页面不刷新的解决)
react怎么绑定state
react纯函数组件setState更新页面不刷新的解决目录
- 问题描述:
- 原因分析:
- 解决方案:
- 补:react中,hooks钩子时useState更新不渲染组件的问题
const [textList, setTextList] = useState(原数组); setTextList(新数组);
当修改原数组时,如果原数组是个深层数组(不只一层),使用setTextList修改时,不会触发页面刷新
这个涉及到可变对象he不可变对象的知识,在vue和react中,如果更新可变对象时,可能会引起视图更新,这是因为,vue和react默认都是浅监听,只会监听数据的第一层,内层数据发生改变,并不会监听到。
解决方案:这里我的解决方案是,先将原数组深拷贝,赋值给新数组,再修改新数组,将修改后的新数组传递进去,这样就会引起视图更新。
var lists = textList.concat(); lists.splice(index, 1); setTextList(lists);
当使用react,写如图组件时,发现一个很关键的问题,当选择用class写的时候,很容易通过组件更新渲染。
当我决定用函数式组件hooks来重构我的组件的时候,发现了一个很难搞的问题,当我通过onChange去改变父组件value的时候,value的值改了,竟然没有重新渲染组件????
一脸懵逼的我,于是试图将class组件时先将value设为空再赋值-----失败了
于是试图通过钩子的生命周期看了一遍。。。。------失败了
还是百度吧------发现了同样的问题。。。发现用只要再后面加slice()
于是本着先解决问题的态度,将图中红圈位置改为了onChange(value.slice())
-----于是,解决了这个神奇的问题。
现在问题解决了,回过头来看看到底怎么回事。。。
查看文档发现一句话useState里数据务必为immutable (不可赋值的对象)
也就是ass component的state也提倡使用immutable数据,但不是强制的,因为只要调用了setState就会触发更新。所以再class组件中没有出现这种问题,或者通过改变为空再赋值是可以触发更新的。
但是再使用useState时,如果在更新函数里传入同一个对象时将无法触发更新。
于是解决思路就是通过slice() 返回一个新的对象去赋值是解决问题的关键。。。。
以上就是react纯函数组件setState更新页面不刷新的解决的详细内容,更多关于react useState页面不刷新的资料请关注开心学习网其它相关文章!
- react判断数据格式(详解Ref在React中的交叉用法)
- reactnative混合开发教程(教你使用vscode 搭建react-native开发环境)
- react native常用组件(react native环境安装流程)
- react的基本知识(React中refs的一些常见用法汇总)
- vscode react jsx语法 开发环境(React-vscode使用jsx语法的问题及解决方法)
- react执行流程(React开启代理的2种实用方式)
- react子组件的动态参数(浅谈React Component生命周期函数)
- reactredux任务处理进度(一文搞懂redux在react中的初步用法)
- 使用react生命周期的常见情况(react+ts实现简单jira项目的最佳实践记录)
- react代码展示(教你如何从 html 实现一个 react)
- vscode react插件(基于visual studio code + react 开发环境搭建过程)
- react重点和难点(关于React状态管理的三个规则总结)
- react组件封装成函数方法(React虚拟列表的实现)
- react usestate实现原理(浅谈react useEffect闭包的坑)
- react hooks详解(React Hooks使用常见的坑)
- react常见问题(React编程中需要注意的两个错误)
- 百事大吉蓝底 绿底手机高清壁纸(绿底手机高清壁纸)
- 蓝底证件照怎么制作 证件照换底色 换尺寸快速搞定(蓝底证件照怎么制作)
- 你喜欢足球吗 足球如何点亮世界的(足球如何点亮世界的)
- 不可分鸽是什么梗(不可分鸽是什么梗)
- 古代的鸽子是爱情的象征,并非和平的使者(古代的鸽子是爱情的象征)
- 一课译词 放鸽子(一课译词放鸽子)
热门推荐
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9