在redux传奇中成功调用后,我试图清除组件状态。我该怎么办?
我正在尝试使用组件状态作为输入值
this.state = {
department: '',
};
我当前的解决方案如下:
add(department).then(action => {
if(action.type.endsWith('SUCCESS')) {
this.setState({department: ''})
}
})
在成功完成传奇之后,我正在尝试清除输入内容。
答案 0 :(得分:0)
我通常采用的方法是让saga更新redux存储中的值,并让组件检查该更改。这可能包括在componentDidUpdate中运行一些代码。
如果您想避免在商店中添加商品,我可以考虑另一种可能性,尽管有点麻烦:您可以创建一个promise并通过它的resolve和reject方法作为调度动作的一部分。然后在传奇中,它可以要求那些人兑现诺言。例如:
export function* addDepartment(action) {
const { department, resolve, reject } = action;
try {
// do something async with department
resolve();
} catch (ex) {
reject(ex);
}
}
像这样在组件的mapDispatchToProps中使用:
const mapDispatchToProps = (dispatch) => ({
add: (department) => {
return new Promise((resolve, reject) => {
dispatch({ type: 'ADD', department, resolve, reject });
});
}
});
...,并在适当的组件中像这样:
this.props.add('some department')
.then(() => this.setState({ department: '' })
.catch((err) => console.log('an error occurred', err));