1,react 什么时候触发rerender
触发rerender的三种方式:
1)通过setState
2)this.forceUdate()
3)通过状态管理,如mobx,redux;
1)和2)好理解,3)为什么呢,只是因为状态改变了吗?求高手解答
2,react update时触发了哪些生命周期
Updating(更新阶段:涉及5个钩子函数)
1)static getDerivedStateFromProps(props, state)
组件每次被rerender的时候,包括在组件构建之后(虚拟dom之后,实际dom挂载之前),每次获取新的props或state之后;每次接收新的props之后都会返回一个对象作为新的state,返回null则说明不需要更新state;配合componentDidUpdate,可以覆盖componentWillReceiveProps的所有用法
2)shouldComponentUpdate(nextProps, nextState)
组件接收到新的props或者state时调用,return true就会更新dom(使用diff算法更新),return false能阻止更新(不调用render)
3)render()
react最重要的步骤,创建虚拟dom,进行diff算法,更新dom树都在此进行
4)getSnapshotBeforeUpdate(prevProps, prevState)
触发时间: update发生的时候,在render之后,在组件dom渲染之前;返回一个值,作为componentDidUpdate的第三个参数;配合componentDidUpdate, 可以覆盖componentWillUpdate的所有用法
5)componentDidUpdate()
组件加载时不调用,组件更新完成后调用
3,迭代器
4,低代码
5,弱网环境下如何优化前端系统
6,redux有哪些中间件
7,redux connect的原理是啥
connect用法介绍:作用是链接react与redux store;
connect([mapStateToProps],[mapDispatchToProps],[mergeProps],[options])
首先connect之所以会成功,是因为Provider组件:
在原应用组件上包裹一层,使原来整个应用成为Provider的子组件
接收Redux的store作为props,通过context对象传递给子孙组件上的connect
它真正连接 Redux 和 React,它包在我们的容器组件的外一层,它接收上面 Provider 提供的 store 里面的 state 和 dispatch,传给一个构造函数,返回一个对象,以属性形式传给我们的容器组件。
8,react父组件渲染子组件不渲染
8.1)shouldComponentUpdate()
React 有一个生命周期函数shouldComponentUpdate()。这个方法可以根据当前的和下一次的 props 和 state 来通知这个 React 组件是否应该被重新渲染。
然而使用这个方法有一个问题,开发者必须考虑到需要触发重新渲染的每一种情况。这会导致逻辑复杂,一般来说,会非常痛苦。如果非常需要,你可以使用一个自定义的shouldComponentUpdate()
方法,但是很多情况下有更好的选择。
8.2) React.PureComponent
React 从 v15 开始会包含一个 PureComponent 类,它可以被用来构建组件。React.PureComponent声明了它自己的 shouldComponentUpdate() 方法,它自动对当前的和下一次的 props 和 state 做一次浅对比。有关浅对比的更多信息。
在大多数情况下,React.PureComponent 是比 React.Component更好的选择。在创建新组件时,首先尝试将其构建为纯组件,只有组件的功能需要时才使用 React.Component。更多信息,请查阅相关文档React.PureComponent。
9,react 怎么捕获错误
1)componentDidCatch
2)getDerivedStateFromError