Javascript 获取useffect中的最后一个状态而不是当前状态

Javascript 获取useffect中的最后一个状态而不是当前状态,javascript,reactjs,Javascript,Reactjs,我试图使用状态数组调用一个操作,但我一直在操作中获取上一个值 useEffect(() => { if (order != null && couriersPleaseData.toPostcode != 0 && packages.length > 0) { const _couriersPleaseData = { toSuburb: order.shipping_address.city,

我试图使用状态数组调用一个操作,但我一直在操作中获取上一个值

 useEffect(() => {

    if (order != null && couriersPleaseData.toPostcode != 0 && packages.length > 0) {
      const _couriersPleaseData = {
        toSuburb: order.shipping_address.city,
        toPostcode: parseInt(order.shipping_address.zip),
        packages: order.tint_packages
      };

      //@ts-ignore
      setCouriersPleaseData({ ...couriersPleaseData, ..._couriersPleaseData });
      getCouriersPleaseQuote(couriersPleaseData, settings);
    }
  }, [packages]);
根据我所相信的,每次包更改时都会运行此操作,但我只获取操作中的前一个状态,而不是当前状态

编辑= 我的输出是-

fromSuburb: "Fitzroy", fromPostcode: 3065, toSuburb: "Sydney", toPostcode: 2000, packages: Array(0)}
fromPostcode: 3065
fromSuburb: "Fitzroy"
packages: []
toPostcode: 2000
toSuburb: "Sydney"
当我从GetCouriersPleaseNote打印它时,问题是您刚刚设置了
couriersPleaseData
,因此它的下一个状态值在此渲染周期内不可用。当
couriersPleaseData
更新时,您可以使用第二个效果触发

useEffect(() => {

  if (order != null && couriersPleaseData.toPostcode != 0 && packages.length > 0) {
    const _couriersPleaseData = {
      toSuburb: order.shipping_address.city,
      toPostcode: parseInt(order.shipping_address.zip),
      packages: order.tint_packages
    };

    //@ts-ignore
    setCouriersPleaseData({ ...couriersPleaseData, ..._couriersPleaseData });
    //getCouriersPleaseQuote(couriersPleaseData, settings); // <-- can't here, still current state value!
  }
}, [packages]);

useEffect(() => {
  getCouriersPleaseQuote(couriersPleaseData, settings)
}, [couriersPleaseData]);
useffect(()=>{
if(order!=null&&couriersplesedata.toPostcode!=0&&packages.length>0){
const_信使请求数据={
toSuburb:order.shipping\u address.city,
拓扑代码:parseInt(order.shipping_address.zip),
包装:order.tint\u包装
};
//@ts忽略
setCouriersPleaseData({…couriersPleaseData,…\u couriersPleaseData});
//GetCouriersPleaseNote(couriersPleaseData,设置);//问题是您刚刚设置了
couriersPleaseData
,因此它的下一个状态值在此渲染周期内不可用。不过,当
couriersPleaseData
更新时,您可以使用第二个效果触发

useEffect(() => {

  if (order != null && couriersPleaseData.toPostcode != 0 && packages.length > 0) {
    const _couriersPleaseData = {
      toSuburb: order.shipping_address.city,
      toPostcode: parseInt(order.shipping_address.zip),
      packages: order.tint_packages
    };

    //@ts-ignore
    setCouriersPleaseData({ ...couriersPleaseData, ..._couriersPleaseData });
    //getCouriersPleaseQuote(couriersPleaseData, settings); // <-- can't here, still current state value!
  }
}, [packages]);

useEffect(() => {
  getCouriersPleaseQuote(couriersPleaseData, settings)
}, [couriersPleaseData]);
useffect(()=>{
if(order!=null&&couriersplesedata.toPostcode!=0&&packages.length>0){
const_信使请求数据={
toSuburb:order.shipping\u address.city,
拓扑代码:parseInt(order.shipping_address.zip),
包装:order.tint\u包装
};
//@ts忽略
setCouriersPleaseData({…couriersPleaseData,…\u couriersPleaseData});

//GetCouriersPleaseNote(couriersPleaseData,设置);//什么的上一个值?完成状态?请同时删除与您的问题没有直接关系的代码,如
consolelogs
初始状态,因此此控制台日志首先打印0个包,当我逐个添加包时,这将给出上一个状态。假设我添加了2个包,那么最后一个控制台日志将为1个包kage。所以是旧状态而不是当前状态。我需要GetCouriersPleaseNote函数的当前状态。你在哪里添加包?我在组件挂载时添加一次,然后用一个表单逐个添加。你能显示这两个的定义吗?
setCouriersPleaseData({…couriersPleaseData,{u couriersPleaseData});
getCouriersPleaseNote(couriersPleaseData,设置)
what的上一个值?complete state?请同时删除与您的问题没有直接关系的代码,如
consolelogs
initial state,因此此控制台日志首先打印0个包,当我逐个添加包时,这将显示上一个状态。假设我添加了2个包,那么最后一个控制台日志将为1包。所以是旧状态而不是当前状态。我需要GetCouriersPleaseNote函数的当前状态。你在哪里添加包?我在组件挂载时添加一次,然后用表单逐个添加。你能显示这两个的定义吗?
setCouriersPleaseData({…couriersPleaseData,…\u couriersPleaseData});
getCouriersPleaseNote(couriersPleaseData,设置);