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的不可变性得到了遵守 
相关推荐
德育处主任Pro30 分钟前
p5.js 三角形triangle的用法
开发语言·javascript·ecmascript
小螺号dididi吹31 分钟前
菜鸟速通:React入门 01
前端·react.js·前端框架
Lstmxx41 分钟前
解放前端生产力:我如何用 LLM 和 Bun.js 构建一个 YApi to TypeScript 的自动化代码生成服务
前端·ai编程·mcp
持续前行1 小时前
vue3 : 导出pdf , 除iframe之外 ,还有其他内容一并导出方式
前端·javascript·vue.js
唐某人丶1 小时前
前端仔如何在公司搭建 AI Review 系统
前端·人工智能·aigc
SenLinMu1 小时前
navigator.clipboard.writeText(text) 这段js在本地执行正常,但是在服务器执行失败时为什么?
javascript
没有鸡汤吃不下饭1 小时前
排查vue项目线上才会出现的故障
前端·vue.js·nginx
吃饭睡觉打豆豆嘛1 小时前
React Router 传参三板斧:新手也能 5 秒做决定
前端
裘乡1 小时前
storybook配合vite + react生成组件文档
前端·react.js
Carolinemy1 小时前
ElementUI 之 el-table
前端·vue.js