最近被问到的前端面试题

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容