redux常见问题答疑
为什么使用reduxReact的核心是将UI组件化,由数据驱动UI的展现。但是如何管理数据模型、组件与数据模型之间的通信,react并没有很好的解决方案。Redux由flux演变而来,同时简化了Flux的流程。 仅仅使用react进行开发的痛点
redux是怎么解决痛点的?1、通过react-redux提供的Provider组件,在根组件外面包一层,这样根组件,以及所有的子组件都能拿到store。实现的原理是基于React自身提供的context属性,但是react官方不推荐直接在组件中使用this.context。所以react-redux提供了另一种方法 <Provider store={store}> <App/> </Provider> // 定义App组件 class Foo extends React.Component{ render() { const { text } = this.props; return <div>{text}</div>; } } const App = connect( mapStateToProps,mapDispatchToProps )(Foo); 2、使用纯函数修改state,保证state变化可预测。每次更改都返回一个全新的state。 容器组件容器组件负责以下几件事情:
展示组件可复用的组件,又称为“傻瓜组件”,仅仅通过容器组件传进来的props进行UI展示,以及操作回调。感知不到redux的存在,脱离redux框架也能使用,尽量保持无状态(可包含少量的UI状态),有以下几条原则:
什么时候引入容器组件在引入之前,你可以先只用展示组件来构建App。当你发现有些组件并不会用到传进来的属性,而仅仅只是把它往下传给子组件的时候(并且层级比较深,超过两层),你就要考虑引入容器组件了。 为什么使用immutable.js首先,在没有immutable.js的情况下,碰到较深层次的数据结构时,更新state会变得很麻烦。 旧的state: { priceInfo: { price: 200,promotion: { offValue: 30 } } } 现在需要只更新 let newState = _.cloneDeep(this.state); newState.priceInfo.promotion.offValue = 50; this.setState(newState); 可以看到,需要先深度复制一份this.state,然后修改offValue的值,最后执行 let initialState = Immutable.fromJS({ priceInfo: { price: 200,promotion: { offValue: 30 } } }); this.setState(initialState.setIn(['priceInfo','promotion','offValue']),50); immutable.js带来的性能提升React做性能优化时经常用到 immutable.js的数据结构如何正确使用
|