1. redux是指1. 把经常用到的数据借助store保存, 2. 不同组件共享的数据借助store保存
在项目中 一些用户信息就可以保存下来, 并通过action触发reducer,来改变store中数据, 注册了store的组件subscribestore, 有变化时会触发组件重新render
** 当组件subscribe到了store中的数据改变,会导致forceupdate/setState/或者props改变, 所以会触发getDeriedStateFromProps.如果使用了这个静态生命周期, 可能会有bug(不停的更新为props的值, 处理办法是使state保存一份prevProps的值备份, 用来在函数中比较)
2. react-redux, 借助connect.js高阶组件和provider.js这个context, 来将父组件上的注册的store中的state、action进行共享。
connect.js (晚上更新)
export Connect=(mapState, mapDispatch)=>{
return function(Component){
class Connect {
componentDidMount(){
this.context.store.subscribe({
forceUdpadate
})
}
render(){
return (
<Component
{....props}
{...mapStateTOProps(...state)}
{...mapdispatchToProps(depatch)}
/>
);
}
}
Connect.contextType = {store}
return Connect;
}
}
3. react-thunk
react-thunk react-logger是借助于柯里话, 将fn([a, b, c])(props) => fn(c(b(a(props)))),这样一层层的 复杂的action转化成副作用action(是指action里面是plainobject)
4. react-saga
主要是借助generator, 进行监听和触发另一个generator, 直到触发到副作用的action。
1.有rootsaga, 放入所有需要被监听的action。 takeEvery/TakeLatest
2. worksaga, 就是takeEvery(action, fn)、takeLastest, takeevery就是(while(true){yield take(), ......yeild fn})当take(action)被执行,将执行下面的fn saga
3. workingSaga,就是上步骤的fn saga。可以是call, 也可以是folk, 甚至可以直接commit change by put
我的问题
在connnect化的component里 export default connect(state=>state, action)(Counter), 在这里其实将所有的store中state, 平铺的map到了props里, action额全部map到props里
所以可以。 <div onclick={this.props.asyncchangename()}>{this.props.bacis.usernme}</div>