React中为甚么强调props的不可变性

一.核心概念:什么是props ?

props是父组件向子组件传递的数据或指令,它是组件之间通信的一种方式,数据从上往下,单向流动

二.核心概念:什么是不可变性?

子组件在接收到props之后,不应该直接修改props的值,而是应该通过props传递新的数据或指令,让父组件来更新子组件的状态,从而实现数据的单向流动。

回答:

主要有三个关键点:

复制代码
1.保持清新的单向数据流,避免数据混乱
react的核心设计是推崇单向数据流,如果子组件可以随便修改props,那么数据来源将变得混乱,prosp的不可变性确保了数据流向清晰,可预测,
出现问题时,更容易顺着数据流找到问题所在。

2.性能优化的关键点,性能浅比较
通过比较组件的新旧props和state来决定组件是否需要重新渲染,
如果props是不可变的,那么在比较新旧props时,可以直接使用浅比较,而不用深比较,从而提高性能。
父组件更新时,会传递一个全新的props对象(引用地址不同),这也就是说不可变性是的react的调和过程更高效

3.提升组件的可预测性和调试效率
当props不可变时,组件行为更易预测,调试更简单,明确子组件内部不会偷偷修改props,在定位问题的时候,可更明确的判断
是父组件props的传递问题,还是子组件自身state管理的问题

三.如果尝试在子组件中修改props,会发生什么?

复制代码
回答:
 1.违反react的设计原则,是一种反模式,开发环境下会给出警告
 2.导致数据流混乱,行为不可预测
 3.会破坏react依赖不可变性进行的性能优化

四.props不可变性如何帮助react进行性能u化

复制代码
回答:
关键在于"浅比较",
React.memo或者pureComponent的优化手段依赖于props的浅比较
如果props是可变的,那么浅比较将失效 ,因为对象没变,但是内容变了,react就无法准确的去判断   

五. 如果子组件需要修改父组件传递过来的props,怎么办?

考察的是单向数据流的理解和组件同信

回答:

复制代码
正确做法是状态提升,父组件通过props传递一个回调函数给子组件,当子组件需要修改数据的时候,需要调用父组件传递过来的回调函数,
将新的数据和指示信号当做参数传递给这个函数,然后父组件在这个回调函数里面去更新自己的state,这个父组件的更新会触发组件的重新渲染,
父组件会将新的props传给子组件,所以他的核心思想在于修改权始终在父组件,数据流依然是单向,props的不可变性得到了遵守 
相关推荐
IT_陈寒6 分钟前
SpringBoot自动配置这个坑,我踩进去又爬出来了
前端·人工智能·后端
铁皮饭盒1 小时前
Bun 哪比 Node.js 快?
javascript·后端
JieE2129 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
runnerdancer9 小时前
LLM是怎么处理messages数组的,提示词缓存又是什么
前端·agent
陈随易10 小时前
VSCode的Copilot扩展支持接入DeepSeek,Kimi了!
前端·后端·程序员
我不是外星人11 小时前
有了 Harness Engineering ,真的还需要研发工程师吗?
前端·后端·ai编程
candyTong12 小时前
RTK 技术原理:一次典型会话里,80% 上下文是怎么省下来的
javascript·后端·架构
IT_陈寒14 小时前
JavaScript的闭包把我坑惨了,说好的内存会自动回收呢?
前端·人工智能·后端
Jackson__15 小时前
分享一个横向滚动案例,带悬停暂停,通用性很强
前端
MariaH16 小时前
git rebase的使用
前端