React 总结
React
memo()
memo()
用来提升组件性能,它将一个普通组件转为纯组件。参数如下:
第一个参数为要转换的组件类;
第二个参数为断言函数,判断是否重新渲染组件,参数为新旧 props 。
没有断言函数的时候,如果传入组件的属性不变(严格比较),则不会重新渲染组件。
memo()
是用来代替旧的PureComponent
及shouldComponentUpdate()
。
错误边界组件
使用静态的
getDerivedStateFromError()
处理错误;通过判断语句决定显示原页面还是错误页面。
React.lazy()
传入一个函数,一般为用 import()
动态导入组件。生成的组件会保证在渲染时才会加载。
Suspense 组件
该组件用来渲染一个等待消息。等待消息组件传给 Suspense 组件的 fallback
属性。
原页面应当抛出一个 Promise 表示进入加载环节,当 Promise 完成后才会显示原页面。
Hook
钩子使用规则
钩子只在组件的作用域中运行;
把功能分解到多个钩子中;
钩子只应当在顶层代码中调用。
useState()
const [state, setState] = useState(initialState);
初始值只会在初始渲染中起作用,如果该初始值需要通过复杂计算获得,可以传入一个函数(同样仅在初始渲染中调用)。
React 使用
Object.is()
来比较 state 。
setState
可以接受一个参数,即旧值。
useRef()
直接在组件中指定 ref
属性,然后使用其 current
属性进行元素访问。
useContext()
useContext()
用来获取自定义 Context 中 Provider 的 value
值:
const value = useContext(MyContext);
useEffect()
useEffect()
相当于是在渲染之后调用的一个函数:
第一个参数为副作用函数(可以返回一个清除函数);
第二个为可选的依赖数组(当数组元素状态变化才会调用副作用)。
和原始值不同,数组、对象等(尤指字面量)仅当为同一引用时才不会触发渲染。
useMemo() & useCallback()
useMemo()
用于创建要缓存的值,避免重新渲染时的不必要重新计算。
第一个参数为用于计算值的回调,第二个为依赖数组(应当包含计算所需的变量)。
useCallback()
与前者类似,但是缓存对象为函数,避免副作用的不必要重复。
useLayoutEffect()
渲染;
调用
useLayoutEffect()
;浏览器绘制,把组件元素添加到 DOM 中;
调用
useEffect()
。
useLayoutEffect()
应当用于获取或者计算 UI、鼠标位置等信息。
useReducer()
可以用 useReducer()
代替 useState()
。函数使用如下:
第一个参数为更新状态的函数,参数为当前状态值和接收来的更新信息;
第二个参数为状态初始值。
返回一个状态值,和一个用来派发更新信息的函数。