當我通過我的動作創建者傳遞數據時,我遇到的問題是Actions must be plain objects
。基本上,我試圖通過點擊一個按鈕來捕獲用戶輸入,並且基於什麼按鈕(視圖)被點擊event.target.innerHTML
被傳遞給動作創建者fetchDataAsync(view)
,然後該動作創建者通過axios和派送基於什麼視圖被選中。操作必須是React/Redux中的普通對象?
雖然我仍然對Redux有所瞭解,但我不確定我在這裏做錯了什麼。我已經看到了前一個行動的創建者內部進行異步操作...
組件與終極版連接:
class ViewSelector extends Component {
selectView(event) {
this.props.fetchDataAsync(event.target.innerHTML);
}
render() {
return (
<nav>
<button onClick={this.selectView.bind(this)}>VIEW ALL</button>
<button onClick={this.selectView.bind(this)}>VIEW LAST WEEK</button>
<button onClick={this.selectView.bind(this)}>VIEW LAST MONTH</button>
</nav>
);
}
}
function mapStateToProps(state) {
return {
view: state.view
};
}
export default connect(mapStateToProps, actions)(ViewSelector);
行動的創建者分派基於event.target.innerHTML
:
export function fetchDataAsync(view) {
return dispatch => {
dispatch(fetchData());
axios.get(DATA_URL)
.then(res => {
dispatch(fetchDataSuccess(res.data));
if (view == 'VIEW LAST WEEK') {
dispatch(lastWeekData(res.data));
} else if (view == 'VIEW LAST MONTH') {
dispatch(lastMonthData(res.data));
}
}).catch(err => {
dispatch(fetchDataFailure(err));
});
};
}
任何意見是讚賞。或者,如果您認爲有更有效的方式來捕獲用戶輸入並將其傳遞給動作創建者......我會好奇聽到更多!
好吧,所以我已經實現了redux-thunk,但是如果我嘗試使用thunk運行的動作創建者有一個需要傳遞的參數呢?在這種情況下查看。我目前沒有工作:'store.dispatch(fetchDataAsync(view));' – Jose
使用redux-thunk實現,您應該可以進行異步調用。這可能是您的代碼的其他問題。什麼是錯誤信息?您是否嘗試過調試以查看該操作是否被觸發? – Lowkey
想通了。我已經在另一個文件中創建了'createStore',並且忘記了它。謝謝! – Jose