【发布时间】:2018-12-16 08:31:01
【问题描述】:
//Action Generator
export const userActionGenerator = () => {
return function (dispatch) {
axios.get(`https://jsonplaceholder.typicode.com/users`)
.then((resp)=> {
//First Call to Dispatch
dispatch({ type: 'GETUSER', payload: resp.data});
})
}
}
//Component
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { userActionGenerator} from '../store/appStore'
class Users extends Component {
render() {
console.log(this.props)
return (
<div>
Users Component
<button onClick={this.props.getAllUsers}>
Load Users</button>
{this.props.data.map(item => {
return (
<div key={item.id}>
<h1>{item.name}</h1>
</div>
)
})}
</div>
)
}
}
const mapStateToProps = (state, props) => ({data: state.users})
const mapDispatchToProps = dispatch => (
{
getAllUsers: () => {
//Second Call to Dispatch
dispatch(userActionGenerator());
}
}
)
export default connect(mapStateToProps,mapDispatchToProps)(Users);
在没有“dispatch”的情况下直接调用“userActionGenerator”不会给出任何响应,我可以通过调用“userActionGenerator”函数调用的调度来使其工作。 但是我不明白为什么我们需要在动作生成器已经调用它时再次调用组件中的调度。
【问题讨论】:
-
您如何将 ActionCreator 即 userActionGenerator 传递给您的组件?
-
是的,我正在从另一个模块导入。我更新了代码以显示导入。
-
我没有从你的问题中得到一件事。在您的代码中,只有一次调用调度。你为什么说你要调用它两次?
-
@kumarmo2 如果您看到代码,我再次将“userActionGenerator”传递给“mapDispatchToProps”内代码底部的调度函数。
-
你必须通过 dispatch 把它发送到 redux,否则,redux 是怎么知道它的呢?当使用 redux-thunk 中间件并分派一个函数时,分派然后被传递到 curried 函数中,以便在执行异步操作后调用。不过,您必须首先将该函数分派给 redux。
标签: reactjs redux redux-thunk