reactjs - React Native - 全局布尔值没有更新?
问题描述
好吧,我在这里读过类似的问题,但我不明白为什么我的动态全局变量在 2 个文件中显示 2 个不同的值/没有更新。
我有一个像这样在文件 1 中声明的全局布尔值,位于此文件中导出的组件上方。我不导出这个全局变量:
global.isinLongPress = false;
class FloatingMenu extends React.PureComponent {
//this component
在整个文件 1 中,我根据是否TouchableOpacity
已点击 a 来更改此布尔值的值。我在这里执行此操作,布尔值显示为true
:
handleLongMenuPress = () => {
const { isOpen, onMenuToggle } = this.props;
onMenuToggle(true);
global.isinLongPress = true;
console.log('long menu press ', global.isinLongPress);
};
在文件 2 中,我想访问这个变量。这会在之前的 console.log 之后打印出来,但是它将布尔值读取为false
:
console.log(global.isinLongPress);
这里发生了什么?如何不断获取此全局变量的更新值?
解决方案
更新任何非状态变量不会导致您的组件重新渲染并访问最新值,它们将显示上次渲染时设置的值。您能想象在更新任何单个变量时您的整个应用程序是否会重新渲染?
要实现此行为,您可以使用 React Context
API,它是全局状态的简单解决方案,更多替代方案包括 Zusand、Jotai、MobX、Redux 等。
推荐阅读
- python - Pandas - 将自动增量值添加到 Dataframe
- flutter - 如何用flutter_bloc设置PlayerState,audioplayers包Flutter
- google-cloud-platform - 如何从 Google Cloud Dataflow 上的 Beam 管道连接到基于本地服务器的文件系统?
- deployment - 你真的可以通过 Azure DevOps 构建和部署 Ubuntu 虚拟机吗?
- cron - 适应 DST 变化的 CRON 表达式
- c# - 有没有办法在 c# 中向多个类型的 httpclient 添加多个处理程序?
- php - 无法使用 SQLSTATE 执行 PHP Artisan 迁移 [42000]
- c# - C# Linq 检查给定的字符串列表是否在列的任一(oldNumber 和 newNumber)中可用,并仅返回匹配的单元格值
- c - 编译 kernel.c 时的未定义引用
- javascript - 升序/降序排序算法与搜索算法的含义是什么?