【发布时间】:2019-08-20 18:17:28
【问题描述】:
我有一个父组件,我从中传递一个回调函数handleProjectStagesSave 和一些数据作为子组件的道具。在我的子组件中,我正在访问props 并将props 对象作为一个整体存储到使用useState 的状态中。
父组件:
function ProjectStages(props) {
const [projectStages, setProjectStages] = React.useState(null);
useEffect(() => {
ProjectAPI.getProjectStages().then((response) => {
setProjectStages(response);
});
}, []);
//this function is passed as prop to child component. child component send data through parameters back to parent
function handleProjectStagesSave(val){
projectStages.someProperty = val; //modifying state property here and updating the state below
setProjectStages(projectStages);
}
if(projectStages === null){
return (<Loader/>);
}
return (
<div>
{(() => {
//loop through state data and pass props to child component
return projectStages.phases.map((stage) => {
return (
<ProjectStageTile criterias={stage.criterias} stagesSave={handleProjectStagesSave}/>
);
});
})()}
</div>
);
}
现在,子组件将回调函数传递给它自己的子组件CriteriaScores,它基本上会传递一些数据并将其一直发送回父组件。
子组件:
function ProjectStageTile(props){
const [projectStageTileState, setProjectStageTileState] = React.useState(props);
return projectStageTileState.criterias.map((criteria) => {
return(
<div>
<div>
{criteria.selectedScore}
</div>
<CriteriaScores stagesSave={projectStageTileState.stagesSave} />
</div>
);
});
}
它工作正常,我获取数据并在父组件中存储更新状态setProjectStages(projectStages);。现在,我希望子组件立即拥有更新的状态数据。但是,我在 React 开发工具中看到的是,在更新状态后,我手动更新了子组件中的 props,然后状态的变化反映在了子组件中。知道有什么问题吗?请让我知道是否可以对此进行更多说明。
更新 1:
我没有直接改变状态,而是尝试了类似下面的方法,但得到了相同的结果。
projectStages.phases.filter((phase) => (phase.gdfatStage === "bid"))[0].criterias
.filter((criteria) => (criteria.criteriaId === val.split(' ')[1]))[0].selectedScore = val.split(' ')[2];
let newProjectStages = projectStages;
setProjectStages(newProjectStages);
更新 2:
也尝试了以下方法,但没有成功。
let newProjectStages = projectStages;
newProjectStages.phases.filter((phase) => (phase.gdfatStage === "bid"))[0].criterias
.filter((criteria) => (criteria.criteriaId === val.split(' ')[1]))[0].selectedScore = val.split(' ')[2];
setProjectStages(newProjectStages);
【问题讨论】:
标签: javascript reactjs react-hooks