为什么更改值时未更新react挂钩的useState

时间:2020-09-14 20:09:59

标签: javascript reactjs react-native

我在React Native中使用钩子。 发生某些事情,当我更新状态时,不会立即分配值。 这是我的示例代码。

async function updateDeviceAdminAttributes(Token) {
    await getAdminAttributes(Token); //This function update objWithRPC
    if(objWithRPC != null) 
    {
      setDeviceAdminAttributes(objWithRPC);
      console.log(deviceAdminAttributes); //this return object {} 
    } else {
      setDeviceAdminAttributes({});
      console.log(deviceAdminAttributes); //this return  Object{ rpc1 : true }
    }
  }

我正在使用react native,并且 getAdminAttributes 函数是来自API的 GET 请求,该API更新了 objWithRPC 对象。当我更改Picker的值(在应用程序中响应本机时),更改 picker 的值时,就会激活此功能,这使我可以查询更新objWithRPC值的查询。如果查询中不包含数据,那么如果不包含该对象,它将抛出一个空值

在输入条件 if(objWithRPC!= Null)时,此变量已正确更新 输入应该出现问题的地方是我通过 useState 钩子在那里更新了变量。

这样做返回 obj = {} 如果我更改了请求,使其返回null,则应该返回obj = {},但是现在,如果它返回原先的对象,则应该返回

为什么会这样?

1 个答案:

答案 0 :(得分:1)

这是因为状态更改是异步的

如果您想跟踪状态变化,可以使用useEffect

useEffect(() => {
    console.log(deviceAdminAttributes);
}, [deviceAdminAttributes]);