组件是否保持旧状态?

时间:2020-09-16 03:27:43

标签: react-native state use-state

我有一个带有自定义按钮作为道具的自定义模式。

const [selection,setSelection] = useState(null)

    const onSelect = (item) => {
      setSelection(item);
   
      Gui.PickOption({
          message: 'choose an action',
          buttons: BUTTONS,
          onPress,
      });
    }; 
BUTTONS = [{buttonText:'print selection', onPress:()=> console.log(selection)}]

这里的问题是,当用户按下按钮时,日志将为NULL,因为似乎模态具有“选择”更新之前的状态。为什么不更新?如何使按钮跟上状态变化? (请记住,上面的代码是我当前面临的问题的一个小示例),本质上,我希望onPress始终以最“当前”状态执行设置的“任务”。 )

1 个答案:

答案 0 :(得分:1)

问题是您在setState之后使用了选择值。我猜您可以使用useEffect来侦听选择值并在其中执行您的逻辑,例如:

const [selection, setSelection] = useState(null);
const onSelect = (item) => {
    setSelection(item);
};
useEffect(() => {
    Gui.PickOption({
        message: "choose an action",
        buttons: BUTTONS,
        onPress,
    });
}, [selection]);

设置状态(此处为setSelections)时,组件将使用新值重新渲染,但是在onSelect按钮的功能中,您仍将使用旧值运行(直到下次使用,即下一次渲染)。