- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第
关于react中列表渲染的局部刷新问题
目录react中列表渲染的局部刷新react实现实时/局部刷新初始做法示例增加数据修改数据删除数据
react中列表渲染的局部刷新
最近在写demo的时候遇到一个更新列表中某个的对象的某个值,最期待的结果肯定是局部刷新,但是我们往往在改变值之后会遇到全局都刷新的问题,以下为个人实验出来的一个小技巧。
首先我有以下数据需要通过react的列表方法渲染:
letlist=[
??{
????id:1,
????show:false
??},
??{
????id:2,
????show:false
??},
??{
????id:3,
????show:false
??}
]
我们通过以下react方法进行渲染:
render(){
??return(
????{list.map((val)={
??????DemoComponentval={val}/
????})}
??)
}
在这里我们需要重新写一个DemoComponent的组件:
importReact,{Component}fromreact;
exportclassDemoComponentextendsComponent{
??render(){
????div
?????divps.val.id/div
?????button()=this.toggleDialog()}toggle/button?
????/div
??}
??toggleDialog(){
????//更改val.showDialog相关操作。
??}
??shouldComponentUpdate(nextProps){
????returnJSON.stringify(nextProps)!==JSON.stringify(ps);
??}
}
当我们点击第一个button,这个时候就能达到局部刷新,只刷新第一个DemoComponent组件的效果了。
但以上操作是什么原理呢?
首先,大家平时都推荐使用的PureComponent不能在这里使用,因为这个组件没有shouldComponentUpdate这个钩子函数,虽然PureComponent也有对比props和nextProps并自行判断当前组件是否需要重新渲染的功能,但是这个对比对对象是没有用的,因为{}==={}是返回false的(对这个知识点不理解的朋友可以去看看堆栈相关的知识),数组同理。
那么为了让其他列表组件没有必要多去render一次,所以我在shouldComponentUpdate中取了个巧,直接JSON.stringify,将两个对象转换成字符串进行比较,这样就方便的多。
当然这里也是自己为了不去写一个isEqual方法而偷懒的做法,这样做的好处是简单方便,也节省时间(isEqual方法必然会for-in循环,对于更复杂的情况甚至需要递归,在内存消耗和时间复杂度上肯定会比JSON.stringify严重),缺点在于可拓展性不高,如果是个数组,就比较头疼。
react实现实时/局部刷新
在React项目中,经常会遇到诸如:删除某一行的同时同时刷新表格展示最新的表格,而不是删除后,手动刷新。
原先是在删除时再次调用生命周期函数中展示表格列表的函数,但会影响性能。
总结:通过JS数组修改usestate中的状态。
初始做法示例
useEffect(()={
????httpOffer()
??},[])
//获取列表
??consthttpOffer=()={
????offerList()
??????.then(res={
????????//console.log(offer,res)
????????if(res.status===200){
??????????if(res.data.code===0){
????????????constdata=res.data.data
????????????data.length0data.forEach(el={
??????????????el.key=
您可能关注的文档
最近下载
- 工程施工资源配置计划施工资源配置计划.docx VIP
- DB65T 4254-2019机关办公楼(区)物业管理规范 保洁服务.docx VIP
- 《中国高血压防治指南(2024年修订版)》解读及临床实践题库答案-2025年华医网继续教育答案.docx VIP
- 开题报告_(某化工降压变电所电气设计)_图文.docx VIP
- 香精香料废水污染控制与治理技术规范.pdf
- 2025年软件定义汽车:SOA和中间件行业研究报告.pdf VIP
- 中华护理学会团体标准(最新版).pdf VIP
- 2025年老旧小区改造工程进度管理与施工安全风险报告.docx
- 2025年学宪法、讲宪法知识竞赛题库及答案.pdf VIP
- 2022年贵州省遵义市八年级竞赛数学试卷.doc VIP
文档评论(0)