首页 > 解决方案 > React Native - 需要立即更新变量,但 useState 是异步的?

问题描述

好的,我已经广泛研究了useState set 方法没有立即反映变化,我知道 React.useState 变量是异步的。

这是一个问题,因为我正在使用组件结构的 React Native 应用程序,并且需要在释放组件的拖动后立即设置和使用变量。我在https://github.com/tongyy/react-native-draggable#readme的 Draggable 的回调函数中执行此操作,因此来自useState set 方法的回调挂钩解决方案不会立即反映更改将不起作用。

这就是我的意思。我从这些开始React.useState

export default function App() {
const [firstColor, setFirstColor] = React.useState('');
const [secondColor, setSecondColor] = React.useState('');

然后我根据 OnDragRelease 回调函数中 Draggable 的位置更新它们:

<Draggable onDragRelease={(event, gestureState) => { ToggleComboColor1(event, gestureState); ToggleComboPage(); } } onPressIn={() => {setDidDrag1(true);}} />

这就是麻烦所在。我必须基于 设置 useState 变量gestureState,然后如果两个 Draggables 都已被拖动,则使用以下命令切换结果ToggleComboPage()

const ToggleComboColor1 = (event, gestureState) => {

      setFirstColor(determineDraggableColor(gestureState.moveX, gestureState.moveY));
      console.log(firstColor); //This does NOT print an updated value
    }

const ToggleComboPage = () =>
    {
      if(didDrag1 && didDrag2)
      {
        console.log(firstColor + " | "+secondColor); //This, consequently, does NOT print an updated value for the most recently dragged 
        // setCurrentColorCombo(
        //   getColorComboItemArray(firstColor, secondColor)[0]
        // );
        // setCurrentKey("Combo");
        // setDidDrag1(false);
        // setDidDrag2(false);
      }
    }

我尝试使用普通var来规避这一点,但是每次重新渲染时都会重新渲染/重新创建这些内容。

如何在此处更新和使用这些变量?

标签: javascriptreact-nativenpmhookuse-state

解决方案


推荐阅读