渲染
组件显示到屏幕之前,其必须被 React 渲染。理解这些处理步骤将帮助您思考代码的执行过程并能解释其行为。 官网
想象一下,您的组件是厨房里的厨师,把食材烹制成美味的菜肴。在这种场景下,React 就是一名服务员,他会帮客户们下单并为他们送来所点的菜品。这种请求和提供 UI 的过程总共包括三个步骤:
- 触发 一次渲染(把客人的点单分发到厨房)
- 渲染 组件(在厨房准备订单)
- 提交 到 DOM(将菜品放在桌子上)
简要
-
您可以使用严格模式去找到组件中的错误
-
如果渲染结果与上次一样,那么 React 将不会修改 DOM
关于性能优化
但是!当你调用setState时,即使更改的数据与原来的数据是一样的,它仍然会去调用render函数!
所以有个shouldComponentUpdate()函数给我们做优化,若数据相同,return false,即可不触发render()生命周期
State
state如同一张快照,设置 state 只会为下一次渲染变更 state 的值。 官网
我理解为:setState是异步的!
在当次渲染中,不管你setData(直接替换值)多少次,在这一次的函数运行中,data的值是不变的,data仍然是该次渲染时的值。
但是我们能通过给setData(传入函数,需要有返回),React就会将函数加入队列,在下一次渲染期间,React 会遍历队列并给你更新之后的最终 state
例子:setData(n => n + 1);
setData(n => n + 1);
setData(n => n + 1);setNumber(number + 5);
setNumber(n => n + 1);
该例子当number为0,会返回6
setState(x)
实际上会像 setState(n => x)
一样运行,只是没有使用 n
!
在React中,想要更改页面数据,要保持immutable的思想, ==> 我们是要替代(replace),而非修改(modify).