React16后的新功能
-
软件版本通常分3级:
- 第一个数字代表大版本
- 第二个数字代表小版本
- 第三个数字代表小打小闹 - bug fixes等
V15 到 V16 是大版本升级,惊心动魄的新功能不少:
-
fragments - 曾几何时,render()必须且只能返回一个node,因此,你不得不加上一些不必要的<div>把多个node包起来。fragments 让你可以直接render一个数组。这个配上map真是太完美了。注意:key是需要的,这个有点烦。所以v16.2.0后,我们可以用特殊字符
<>
, 例如:<><li /><li /><>
,这样可以就可省略了。 -
对了,你可以直接返回字符串了 - 不由再次感叹:曾几何时,render()必须且只能返回一个node
-
contextAPI - 就是说createContext之后,可以在一个component里提供provider,例外一个component里通过consumer来读取
祝:这个我基本上没用过 - 因为我要吗直接传props,或者用其他state管理,例如:redux或者mobx等。 -
createRef API - 这个在不受控制的form还是很有用的。受控制指通过react state来控制form的字。
-
新的lifecycles
- getDerivedStateFromProps
- getSnashotBeforeUpdate
注意:几个will的lifecycles, 到V17后就没有life了。所以,大家有空还是看看上面两个新的lifecyles吧。
- StrictMode - 用了发现下面几个潜在问题
- Identifying components with unsafe lifecycles
- Warning about legacy string ref API usage
- Detecting unexpected side effects
-
React.memo - 用来替代PureComponent 或者 shouldComponentUpdate, memo让component变存, 或者说只有props变才重新render。如只是父级component变了,memo子component不会重新render
-
React.lazy - 用来实现code-split - 基本是react loadable的复制版。
下面几个还没出:
-
Hooks - 让functional component 可以使用 state 通过 useState()
-
suspend
-
concurrent rendering
10和11 基本上是用了提供弱CPU和慢网速用户的用户体验。大概意思:hold住render,知道数据ready,这样对网速快的用户少了loading icon,对慢用户仍然有repsond。这个概念有点难,等真正开始用了,我们再深入!