Reactjs Redux Thunk无法以静默方式更新状态
子组件具有以下按钮代码:Reactjs Redux Thunk无法以静默方式更新状态,reactjs,redux,redux-thunk,Reactjs,Redux,Redux Thunk,子组件具有以下按钮代码: // SelectDonation.js <button onClick={(e) => { e.preventDefault(); this.props.testThunk(); console.log(store.getState()); }} >Test thunks</
// SelectDonation.js
<button
onClick={(e) => {
e.preventDefault();
this.props.testThunk();
console.log(store.getState());
}}
>Test thunks</button>
我希望一个新的状态属性redux\u thunk\u test\u var
在状态中显示,但它不会单击。不过,我确实在控制台中看到了带有初始状态的状态变量
我传得不对吗?这里是App.js
// App.js
{this.props.checkoutStep === checkoutSteps.selectDonation &&
<SelectDonation
dispatch_set_donation_amount = {this.props.dispatch_set_donation_amount}
dispatchChangeCheckoutStep={this.props.dispatchChangeCheckoutStep}
{...this.props}
/>
}
</Modal>
</header>
</div>
);
}
}
const map_state_to_props = (state) => {
return {
log_prop : state.log_to_console,
donation_amount : state.donation_amount,
checkoutStep : state.checkoutStep,
}
};
const map_dispatch_to_props = (dispatch, own_props) => {
return {
dispatch_set_donation_amount : amount => dispatch(set_donation_amount(amount)),
dispatchChangeCheckoutStep : newStep => dispatch(changeCheckoutStep(newStep)),
dispatchUpdateStateData : (stateData, stateVariable) => (dispatch(updateStateData(stateData, stateVariable))),
testThunk
}
};
您需要分派testThunk()
操作创建者的结果。现在,您只是返回它,而不是调用dispatch(testThunk())
请参阅以帮助更好地理解问题
解决此问题的最佳方法是使用。作为其中的一部分,我建议更改道具名称以删除单词“dispatch”,这允许您使用更简单的ES6对象文字语法:
const map_dispatch_to_props = {
set_donation_amount,
changeCheckoutStep,
updateStateData,
testThunk,
};
您需要分派testThunk()
操作创建者的结果。现在,您只是返回它,而不是调用dispatch(testThunk())
请参阅以帮助更好地理解问题
解决此问题的最佳方法是使用。作为其中的一部分,我建议更改道具名称以删除单词“dispatch”,这允许您使用更简单的ES6对象文字语法:
const map_dispatch_to_props = {
set_donation_amount,
changeCheckoutStep,
updateStateData,
testThunk,
};
const map_dispatch_to_props = {
set_donation_amount,
changeCheckoutStep,
updateStateData,
testThunk,
};
conponentDidMount() {
this.props.testThunk();
}
const map_dispatch_props = {
testThunk
}
//action creator
const fetch = (data) => ({
type: 'thunkTest',
payload: data
})
const fakeFetch = () => new Promise((resolve, reject) => setTimeout(() => resolve('Set Timeout done'), 2000));
export const testThunk = () => (dispatch) => fakeFetch.then(data => dispatch(fetch(data)))