我有一个带有自定义按钮作为道具的自定义模式。
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始终以最“当前”状态执行设置的“任务”。 )
答案 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
按钮的功能中,您仍将使用旧值运行(直到下次使用,即下一次渲染)。