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的不可变性得到了遵守 
相关推荐
linhuai10 小时前
在flutter中dio应该如何封装和使用
前端
汉堡大王952711 小时前
JavaScript类型侦探:四大神器让你一眼看穿变量真身
前端·javascript
Debroon11 小时前
从零开始手写ReAct Agent
前端·javascript·react.js
软件技术NINI11 小时前
html css js网页制作成品——成毅html+css+js 5页附源码
javascript·css·html
Hello.Reader11 小时前
Rocket 0.5 快速上手3 分钟跑起第一个 Rust Web 服务
开发语言·前端·rust
YIN_O11 小时前
openEuler 上 CUDA 与 ROCm 的 GPU 加速实战
前端
CryptoRzz11 小时前
对接墨西哥股票市场 k线图表数据klinechart 数据源API
开发语言·javascript·web3·ecmascript
古城小栈11 小时前
前端安全进阶:有效防止页面被调试、数据泄露
前端·安全·状态模式
chilavert31811 小时前
技术演进中的开发沉思-230 Ajax:Prototype.js 重构原生 DOM
开发语言·前端·javascript
手握风云-11 小时前
JavaEE 进阶第七期:Spring MVC - Web开发的“交通枢纽”(一)
前端·spring·java-ee