Cola装饰器组件的redux坑
使用Cola装饰器进行数据初始化,如果这个key和自定义的mapStateToProps的props属性有冲突,那么key定义的数据将会更优先
下面例子,定义了初始化的props属性foo,然后mapStateToProps也定义了返回的props.foo的新value,但是,其实dispatch后props.foo还是最开始的"bar",而不是"bar again"。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| const {Cola, store} = require('koa-cola/client'); @Cola({ initData : { foo : async ({ params, helpers, store: { dispatch } }) => { return await Promise.resolve('bar'); } }, mapStateToProps : ({ fooState }) => { return { foo : fooState }; }, mapDispatchToProps : dispatch => { return { changeFoo: () => { dispatch({ type: 'CHANGE_FOO' }); } }; }, reducer : { fooState : (state = '', action) => { switch (action.type) { case 'CHANGE_FOO': return 'bar again'; default: return state; } } } }) class Some_Page extends React.Component<Props, States> { constructor(props: Props) { super(props); } render() { return <div> {this.props.foo} <button onClick={() => this.props.changeFoo()}>change foo</button> </div>; } } export default Some_Page;
|
如果必须要修改props.foo,可以使用下面的方法。
1 2 3 4 5 6
| const loadSuccess = store.loadSuccess; ... ... changeFoo: () => { dispatch(loadSuccess('foo', 'bar again')); }
|