Reactjs 反应:在父级中收到的回调值未将另一个子级中的最新值作为prop |函数组件传递
我正在使用功能组件: 我有一个父组件和两个子组件 子1通过回调将数据传递给父级。在父级中,使用Reactjs 反应:在父级中收到的回调值未将另一个子级中的最新值作为prop |函数组件传递,reactjs,callback,setstate,react-props,react-functional-component,Reactjs,Callback,Setstate,React Props,React Functional Component,我正在使用功能组件: 我有一个父组件和两个子组件 子1通过回调将数据传递给父级。在父级中,使用setState接收回调值,并将其分配给变量,然后正确发送给子级2 但是,当子组件1进行任何更改并通过回调将数据传递给父组件时,父组件不会将另一个子组件中的最新值作为prop传递。仍然显示出旧的价值观 图示: 示例代码: const ContainerComponent = (props) => { let [selectedCenterId, setSelectedCenterId]
setState
接收回调值,并将其分配给变量,然后正确发送给子级2
但是,当子组件1进行任何更改并通过回调将数据传递给父组件时,父组件不会将另一个子组件中的最新值作为prop传递。仍然显示出旧的价值观
图示:
示例代码:
const ContainerComponent = (props) => {
let [selectedCenterId, setSelectedCenterId] = useState("");
const callbackFromServiceDetails = (centerId) => {
setSelectedCenterId((selectedCenterId = centerId));
console.log("Inside parent callback");
console.log(selectedCenterId);
};
return (
<>
<ChildComponent1 activeTab={activeTab} parentCallback={callbackFromServiceDetails}></ChildComponent1>
{
selectedCenterId !== "" ?
<ChildComponent2 activeTab={activeTab} selectedCenterId={selectedCenterId}></ChildComponent2>
:
<></>
}
</>
);
};
export default ContainerComponent;
========================================================================
const ChildComponent1 = ({centersNLocations, actions, ...props}) => {
const nextButtonClick = e => {
e.preventDefault();
props.parentCallback(selectedCenter);
};
return (
<>
...
</>
);
};
ChildComponent1.propTypes = {
...
};
function mapStateToProps(state) {
return {
...
};
}
function mapDispatchToProps(dispatch) {
return {
actions: {
...
}
};
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(ChildComponent1);
=====================================
const ChildComponent2 = (props) => {
let [centerId, setCenterId] = useState(props.selectedCenterId);
console.log(centerId);
return (
<>
...
</>
);
};
export default ChildComponent2;
const container组件=(道具)=>{
让[selectedCenterId,setSelectedCenterId]=useState(“”);
const callbackFromServiceDetails=(centerId)=>{
设置selectedCenterId((selectedCenterId=centerId));
log(“内部父回调”);
console.log(selectedCenterId);
};
报税表(
{
selectedCenterId!==“”?
:
}
);
};
导出默认容器组件;
========================================================================
常量ChildComponent1=({centersNLocations,actions,…props})=>{
const nextButtonClick=e=>{
e、 预防默认值();
props.parentCallback(selectedCenter);
};
返回(
...
);
};
ChildComponent1.propTypes={
...
};
函数MapStateTops(状态){
返回{
...
};
}
功能图DispatchToprops(调度){
返回{
行动:{
...
}
};
}
导出默认连接(
MapStateTops,
mapDispatchToProps
)(组成部分1);
=====================================
常量ChildComponent2=(道具)=>{
let[centerId,setCenterId]=useState(props.selectedCenterId);
console.log(centerId);
返回(
...
);
};
导出默认的子组件2;
有什么想法会导致这样的问题吗?我认为,当您将引用从useState更改为值本身时,问题出现在父组件代码中。It行
setSelectedCenterId((selectedCenterId=centerId))代码>您不应使用相等的运算符,因此您的函数应如下所示:
const callbackFromServiceDetails=(centerId)=>{
设置选定的中心ID(中心ID);
log(“内部父回调”);
console.log(selectedCenterId);
};
未来提示:如果您想保持引用不变,请使用const
而不是let
。您能提供一些代码吗!添加文档的相关部分code@JatinParmar添加了示例代码我已经测试了你的代码,它工作得很好,但在第二次更改中没有传递正确的值。我想要更新的值,因此放置const不会让数据更改,我希望这是正确的。你可以使用const,它将在那里更新值。不要担心。但是您的主要错误是代码中有赋值,所以这一行基本上是错误的:setSelectedCenterId((selectedCenterId=centerId))代码>