首页 > 解决方案 > 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);

这里发生了什么?如何不断获取此全局变量的更新值?

标签: reactjsreact-nativereact-reduxglobal

解决方案


更新任何非状态变量不会导致您的组件重新渲染并访问最新值,它们将显示上次渲染时设置的值。您能想象在更新任何单个变量时您的整个应用程序是否会重新渲染?

要实现此行为,您可以使用 React ContextAPI,它是全局状态的简单解决方案,更多替代方案包括 Zusand、Jotai、MobX、Redux 等。


推荐阅读