将setState用作另一个中的回调是正确的方法吗?这是我的一部分代码。
这是我的初始状态:
state = {
resumeCollection: [],
filters: {
educationLevels: [],
educationFields: [],
jobAdvertisementId: []
}
};
这是componentDidMount部分:
componentDidMount() {
this.setState(prevState =>( {filters : {
jobAdvertisementId : [...prevState.filters.jobAdvertisementId, {value: this.props.router.query.value, id: this.props.router.query.id}]}
}
)
, () => this.setState(state => {
return({
resumeCollection : state.resumeCollection.filter(resume => resume.jobAdvertisementId == state.filters.jobAdvertisementId[0].id )
});
}
)
)
}
答案 0 :(得分:1)
我建议不要进行2种状态更新,因为这样会引入无用的第二次渲染。
如果您需要根据状态的另一部分来设置状态的一部分,则可以对其进行计算并将其存储在return语句之外的变量内,并在需要的地方使用它。
在您的情况下,可能看起来像这样:
componentDidMount() {
this.setState(prevState => {
const nextJobAdvertisementId = [
...prevState.filters.jobAdvertisementId,
{
value: this.props.router.query.value,
id: this.props.router.query.id
}
];
return {
filters: {
jobAdvertisementId: nextJobAdvertisementId
},
resumeCollection: prevState.resumeCollection.filter(
resume => resume.jobAdvertisementId === nextJobAdvertisementId[0].id
)
};
});
}
答案 1 :(得分:0)
是的,当您要基于第一个setState()设置另一个状态时,可以将另一个setState作为回调的一部分添加到第一个setState()中。
在下面的示例中,我基于状态'a'设置'b'状态:
例如
const setB = () => {
if(this.state.a)
this.setState({b:"Success"})
else
this.setState({b:"failure"})
}
this.setState({a:true},this.setB)