Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 反应:在父级中收到的回调值未将另一个子级中的最新值作为prop |函数组件传递_Reactjs_Callback_Setstate_React Props_React Functional Component - Fatal编程技术网

Reactjs 反应:在父级中收到的回调值未将另一个子级中的最新值作为prop |函数组件传递

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]

我正在使用功能组件:

我有一个父组件和两个子组件

子1通过回调将数据传递给父级。在父级中,使用
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))