javascript - 如何在 React-Native 中的 onPress Alert 函数中设置状态
问题描述
我目前正在尝试在 React-Native 的 onPress 事件中更改状态的方法,但运气不佳。当有人按下“改变状态?” 召唤警报中的选项,我想将状态更改为true
. 但是,当调用setState()
或useCallback()
切换状态时,它会继续打印错误打印(两次)。
仅供参考:我在代码中将警报称为ExampleAlert()
而不是<ExampleAlert />
其他地方。
这个问题是否与警报在 RN 中的编写方式有关,或者警报不会触发重新渲染的事实?
const [state, setState] = useState(false);
const changeStateCallback = useCallback(() => {
setState(!state);
}, [state]);
const ExampleAlert = () => {
Alert.alert(
'Title',
'Message',
[
{
text: 'Change State?',
onPress: () => {
changeStateCallback;
console.log(state);
setState(true);
console.log(state);
},
},
{
text: 'OK',
onPress: () => {},
},
],
);
return null;
};
解决方案
useState 是异步的,在同一个环境下看不到变化
所以你只需要这样做:
onPress: () => {
setState(true);
},
或者
const handlePress =()=>{
setState(true);
}
onPress: () => { handlePress },
此语法() => { }
尚未执行,当用户单击它时执行。
编辑1:
const handlePress =()=>{
setState(true);
console.log(state) // here you can not see the change
}
console.log(state) //put your console outside of handlePress to see the change
推荐阅读
- css - :not() 选择器中的 Sass 扩展目标?
- javascript - Ping 用户上面嵌入的消息 Discord.js
- oop - R:如何生成与先前生成的偏差自相关的偏差
- c# - 将服务主机(通过 TCP,非 Web)从 .NET Framework 4.8 移植到 .NET Core 3.1
- containers - 是否可以通过 ssh 进入部署在 vpc2 infa 上的 IKS 工作节点?
- phaser-framework - 如何让 Parcel 使用“classProperties”编译 Phaser 游戏?
- c# - 将特定数字之前的所有数字相加(包括数字)
- python - 在我将 discord.py 与我的主脚本结合后,任何其他代码都不会运行
- sharepoint-online - SharePoint - 从另一个站点的特定文件夹中获取文档
- bash - 由于 catalina.sh 中的错误,Tomcat 无法运行