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的不可变性得到了遵守 
相关推荐
阿蒙Amon1 小时前
TypeScript学习-第7章:泛型(Generic)
javascript·学习·typescript
睡美人的小仙女1271 小时前
Threejs加载环境贴图报错Bad File Format: bad initial token
开发语言·javascript·redis
fanruitian2 小时前
uniapp android开发 测试板本与发行版本
前端·javascript·uni-app
rayufo2 小时前
【工具】列出指定文件夹下所有的目录和文件
开发语言·前端·python
RANCE_atttackkk2 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
摘星编程2 小时前
React Native + OpenHarmony:Timeline垂直时间轴
javascript·react native·react.js
2501_944525543 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 支出分析页面
android·开发语言·前端·javascript·flutter
jin1233224 小时前
React Native鸿蒙跨平台完成剧本杀组队详情页面,可以复用桌游、团建、赛事等各类组队详情页开发
javascript·react native·react.js·ecmascript·harmonyos
李白你好4 小时前
Burp Suite插件用于自动检测Web应用程序中的未授权访问漏洞
前端
经年未远5 小时前
vue3中实现耳机和扬声器切换方案
javascript·学习·vue