-
Redux的实现流程
用户页面行为触发一个Action,然后,Store 自动调用 Reducer,并且传入两个参数:当前 State 和收到的 Action。Reducer 会返回新的 State 。每当state更新之后,view会根据state触发重新渲染。
-
react-redux的实现原理
Redux作为一个通用模块,主要还是用来处理应用中state的变更,通过react-redux做连接,可以在React+Redux的项目中将两者结合的更好。
react-redux是一个轻量级的封装库,它主要通过两个核心方法实现:
- Provider:从最外部封装了整个应用,并向connect模块传递store。
- Connect:
-
- 包装原组件,将state和action通过props的方式传入到原组件内部。
-
- 监听store tree变化,使其包装的原组件可以响应state变化
-
redux中间件的理解,以及用过哪些中间件
理解:中间件就是要对redux的store.dispatch方法做一些改造,以实现其他的功能。
我用过redux-thunk,就拿它举例。
背景:Redux 的基本做法,是用户发出 Action,Reducer 函数立刻算出新的 State,View 重新渲染,但这是做同步。 而如果有异步请求时,那就不能知道什么时候获取的数据有存进store里面,因此此时需要在请求成功时返回一个标识或状态,并在此时再触发action给reducer传值。
因此,为了解决异步的问题,就引入了中间件的概念。
作用: redux-thunk 帮助你统一了异步和同步 action 的调用方式,把异步过程放在 action 级别解决,对 component 调用没有影响。
-
react性能优化。
-
使用无状态组件(函数组件,无state,只有props)。
-
React.memo(), 和 PureComponent 很相似,它帮助我们控制何时重新渲染组件.
const ToBeBetterComponent = React.memo(function MyComponent(props) { // only renders if props have changed }) -
PureComponent(纯组件)
PureComponent原理
当组件更新时,如果组件的 props 和 state 都没发生改变, render 方法就不会触发,省去 Virtual DOM 的生成和比对过程,达到提升性能的目的。具体就是 React 自动帮我们做了一层浅比较:if (this._compositeType === CompositeTypes.PureClass) { shouldUpdate = !shallowEqual(prevProps, nextProps) || !shallowEqual(inst.state, nextState); }而 shallowEqual 又做了什么呢?会比较 Object.keys(state | props) 的长度是否一致,每一个 key 是否两者都有,并且是否是一个引用,也就是只比较了第一层的值,确实很浅,所以深层的嵌套数据是对比不出来的。
-
Component重写shouldComponentUpdate钩子函数(return true 重新render)
-
遍历节点的时候设置key.
-
-
虚拟dom是什么?为什么虚拟dom会提升代码性能。
js对象,为什么现在都用虚拟dom,虚拟dom就是真实dom的一个js对象。以前需要两个页面的差异,需要去比对真实dom的比对,真实的dom节点会有事件,属性,还会有各种各样的方法。所以两个真实dom的比对会非常耗性能。于是把dom对象变成js对象,js对象就没有dom对象上乱七八糟的特性了。js对象就比较快。