将 setState 作为回调传递给另一个 setState
Pass setState as a callback to another setState
在另一个调用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 )
});
}
)
)
}
是的,当您想基于第一个设置另一个状态时,您可以将另一个 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)
我建议不要像那样进行 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
)
};
});
}
在另一个调用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 )
});
}
)
)
}
是的,当您想基于第一个设置另一个状态时,您可以将另一个 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)
我建议不要像那样进行 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
)
};
});
}