yisar/asta

actions 的异步方法在 componentWillMount 或 componentDidMount调用不

lovedaan opened this issue · 2 comments

@Map({
state: ['todos'],
mutations: ['query'],
actions: ['asyncQueryTodo']
})
componentWillMount() {
console.log(this.props); // {}
//this.props.asyncQueryTodo();

}
componentDidMount() {
    console.log(this.props) // {}
}

那怎么在组件初始化的时候调用actions的方法呢

yisar commented

这……componentDidMount 调用不到 actions,因为它是基于 context api 的,context 只能高阶组件的 render 的时候用
如果你想要用 actions 的方法,需要将整个 store 实例引入
比如

import {store} from '../store/index'
class App extends React.Component {
  componentDidMount(){
    this.store.dispatch(action) 
  }
}

这在 redux 里也是一样的:
https://stackoverflow.com/questions/44452873/how-init-change-redux-state-from-componentdidmount
不过你提出的也很有道理,确实有这个场景
我最近有点忙,等过几天我会研究研究

然后就是……
暂时的解决方案,可以是要么引入 store ,要么就在组件里写直接也异步逻辑吧,不要放到 actions 里了

yisar commented

#13 下个版本搞定这个问题