React Native:放置全局状态变量的位置

2024-01-17

我正在开发我的第一个 React Native,我再次需要一些帮助。 我的应用程序有一种状态 - 运动,这对于组件、屏幕等非常重要。根据所选的运动,我也会加载不同的样式、图像和 api 信息。 将有一个模式,用户可以从中更改运动。模式现在是 Header 组件的一部分,而 Header 组件又是 Screen 组件的一部分。

所以我的问题是如何或在哪里放置这个运动状态变量,这样我就可以在任何地方访问它并进行更改以更新新样式等。

该应用程序的概述如下:

App.js

    import AppContext from './utility/context';
    
    export default function App() {
        
          const [sport, setSport] = React.useState('soccer');
          const state = {sport, setSport};
        
          return (
             <AppContext.Provider sport={state}>
                <OfflineNotice />
                <Screen />
             </AppContext.Provider>
          );
        }

上下文.js

import React from "react";

export const AppContext = React.createContext({
    sport: 'soccer', 
    setSport: () =>{}
});

屏幕.js

export default function Screen ({children}) {
    return (
        <>
        <Header />
        <SafeAreaView style={styles.screen}>
            <View style={styles.container}>{ children }</View>
        </SafeAreaView>
        <TabNavigator i18n={i18n}/>
        </>
    );
}

在 Header.js 中,我还将使用该未来状态,但目前没有什么有趣的。 但这里将是视图,用户可以从中更改运动状态变量。

HomeScreen.js - 它是 TabNavigator 的第一个屏幕

export default function HomeScreen({ navigation }) {

  const today = Moment(new Date().getTime()).format('YYYY-MM-DD');
  const [predictions, setPredictions] = useState([]);
  const [loading, setLoading] = useState(true);
  const params = {
    lang: 'en',
    date: today,
    sport: 'soccer',
  };

  ...

}

这里的运动状态是硬编码的,因为我还不知道如何继续。

我听说过 Redux,但我还没有使用它,所以如果有任何不使用 Redux 的解决方案,我将不胜感激。

先感谢您!


您可以使用以下方法实现此目的反应上下文 https://reactjs.org/docs/context.html

您可以简单地在 app.js 中拥有一个状态,并使用上下文在应用程序中任何需要的地方访问它。

首先您需要创建上下文。如果是单独的文件就更好了

const AppContext = React.createContext({sport:'value',setSport=()=>{}});

这里的默认值是选项,但当您使用打字稿以避免警告时特别推荐。

现在你必须在你的 app.js 中使用它,如下所示

export default function App() {
  const [sport,setSport] = React.useState('value');
  
  const state={sport,setSport};
  ...

  return (
    <AppContext.Provider value={state}>
      <OfflineNotice />
      <Screen />
    </AppContext.Provider>
  );
}

您必须导入上下文并使用提供程序作为包装器,设置您拥有的本地状态的值。现在您可以在树中的任何位置访问它并根据需要进行修改。

// 使用 useContext 钩子访问上下文,该组件应该位于树中,并且您应该导入 AppContext

const {sport,setSport} = useContext(AppContext);

你可以像下面这样显示它

<Text>{sport}</Text>

或者像下面这样设置

<Button title="Set Value" onPress={()=>{setSport('value')}}>

这个例子只是一个字符串,但你甚至可以有一个对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React Native:放置全局状态变量的位置 的相关文章

  • useLocation 挂钩 - 确定过去的位置

    根据 React Router 5 1文档 https v5 reactrouter com web api location应该可以看到 应用程序现在在哪里 你想让它去哪里 甚至它曾经在哪里 在我的应用程序中 我需要查看 它在哪里 我访问
  • Redux 状态在 mapStateToProps 中未定义

    我目前正在关注this http teropa info blog 2015 09 10 full stack redux tutorial html教程 我遇到了一些障碍mapStateToProps在下面的代码中 import Reac
  • 仅显示某些路由的组件 - React

    我正在 React 中开发一个带有登录界面的网站 该网站显示一个自定义导航组件 但是我不希望它显示在主路线 即登录页面 上 但据我了解 静态组件不会在路线更改时重新呈现 这准确吗 我正在使用 React Router 来处理所有路由 这是我
  • 将 React Native 集成到 Xamarin 项目中

    我的任务是看看是否可以将 React Native 集成到 Xamarin Forms 项目中 我认为我已经非常接近实现这一目标 但我不能肯定地说 我知道这是一个有点奇怪 倒退的解决方案 但无论如何我想尝试一下 看看我是否可以打败它 Int
  • Flux + React.js - 操作中的回调是好还是坏?

    让我解释一下我最近遇到的问题 我有 React js Flux 驱动的应用程序 有一个列表显示文章数量 注意 应用程序中有多个不同的列表 和文章详情查看在里面 但每个列表只有一个 API 端点 它返回文章数组 为了显示我需要的详细信息fin
  • 如何访问另一个 mobx 商店中的 mobx 商店?

    假设以下结构 stores RouterStore js UserStore js index js each of Store jsfiles 是一个 mobx 存储类 包含 observable and action index js只
  • React Native - 在单元测试中模拟 FormData

    我在测试我的 thunk 时遇到问题 因为我的许多 API 调用都使用 FormData 而且我似乎不知道如何在测试中模拟它 我正在使用杰斯特 我的安装文件如下所示 import isomorphic fetch Mocking the g
  • 如何获取使用 .map 渲染的第一个元素的 ref?

    我需要在几行中显示视频 卡片 的缩略图 并重点关注第一个缩略图 我使用嵌套地图进行了显示 该代码基本上迭代视频数组并返回多行视频 我们如何关注第一个渲染的元素 我认为我们需要获得第一个要聚焦的元素的引用 但是我们如何在这里设置 ref 并在
  • React Native - 跨屏幕传递数据

    我遇到了一些麻烦react native应用程序 我不知道如何跨屏幕传递数据 我意识到还有其他类似的问题在 SO 上得到了回答 但是这些解决方案对我来说不起作用 我正在使用StackNavigator 这是我的设置App js file e
  • 如何修复超出最大调用堆栈大小

    有一个 MERN Firebase 应用程序并收到此错误和一堆 atdeepExtend deepCopy ts 71 RangeError Maximum call stack size exceeded getApps as apps
  • React Native 反应导航 SafeArea 问题

    我更新了我的android项目 react navigation was 3 x 搬去5 x 决定实施必要的更改 但它不想工作 从反应导航页面复制了示例 但仍然显示相同的错误 有人知道问题出在哪里吗 当我用谷歌搜索一半的互联网时找不到解决方
  • × TypeError:无法读取未定义的属性(读取“map”)

    当我尝试运行此代码时 它给出了此错误 TypeError 无法读取未定义的属性 读取 map 为什么会发生这种情况 我怎样才能让它发挥作用 import React from react import Grid from material
  • 内容丰富的 api markdown 转换为 HTML

    有没有什么简单的方法可以将 Markdown 文本从 Contentful api 转换为 html 代码以显示在 html 页面上 我尝试过使用 pagedown 和一些类似的技术 但似乎没有一个对我有用 我是 Contentful 的客
  • 为什么react中的组件需要大写? [复制]

    这个问题在这里已经有答案了 因此 当您声明一个组件以小写首字母进行反应时 它不会显示 也不会引发错误 当您将组件名称大写时 它确实有效 这样的实现是怎样的呢 为了避免与现有的 html 元素发生冲突 还是这是一个错误 var test Re
  • Google 跟踪代码管理器导致 SPA 中的整个页面重新加载 - React

    当我在 React 的 GTM 中添加触发器时 a a or 元素 它会导致单击时重新加载整个页面 而不是仅重新渲染应用程序的一部分 当我删除谷歌跟踪时 一切都会顺利进行 有没有办法 如何配置 GTM 不影响应用程序的行为 如果 Googl
  • 在反应本机中共享一行的两个按钮

    我有两个看起来像这样的按钮 这是代码 render gt
  • 如何使用 setState 插入 React 的状态数组?

    我正在寻找在反应中修改和数组并在特定索引上插入元素 这就是我的状态 this state arr 我想做的是编译这个arr index random element 反应 js setState 语法 我试图做的是 this setStat
  • 删除旧版本的 create-react-app

    我想使用创建一个新的反应应用程序create react app脚本 我仍然安装了一个不再受支持的全局版本 因此我卸载了全局版本并尝试创建一个新版本 如下所示 npx create react app myapp 然后我得到了一个没有使用模
  • React Native Expo StackNavigator 重叠通知栏

    我正在尝试为我的 React Native Expo 应用程序实现导航栏 这里有一个问题 dependencies expo 18 0 3 react 16 0 0 alpha 12 react native 0 45 1 react na
  • ‘state’未定义 no-undef

    我使用教程来学习 React 但我很快就陷入困境 在教程中 他们使用以下代码 import React Component from react class Counter extends Component state count 0 r

随机推荐

  • 在没有 React.memo 的情况下使用 useCallback 有什么好处吗?

    根据我从 React 文档和网络上其他材料中了解到的 useCallback 用于通过确保将回调的记忆版本传递给子组件来避免重新渲染子组件 因此子组件的引用属性保持相同 但只有当我在子组件上使用 React memo 时 所有这些才有效 如
  • Clang、GCC 和 LTO 之间的互操作性

    我知道 Clang 和 GCC 或多或少是兼容的 C C 编译器 只要处理好架构标志 预定义和链接正确的库之类的事情 使用一个编译器创建库并将它们与另一个编译器创建的对象链接实际上非常简单 至少在 x86 上 这是一个小测试项目 正是这样做
  • 同步 XHR 弃用

    根据XHR规格 https xhr spec whatwg org async false已被弃用 现代用户代理应该开始警告甚至抛出异常 工作人员外部的同步 XMLHttpRequest 正在从 Web 平台中删除 因为它会对最终用户的体验
  • Doctests:如何抑制/忽略输出?

    以下 废话 Python 模块的 doctest 失败 gt gt gt L gt gt gt if True append to L XXX gt gt gt L 1 def append to L L append 1 class A
  • Android:getMainLooper() 和 Looper.myLooper() 之间的区别

    我现在正试图复兴一个项目 getMainLooper 出现异常 我认为MainLooper初始化可能有问题 并在此之前添加了Looper prepareMainLoop 异常告诉我该对象已经有一个循环器被抛出 然后我尝试用 Looper m
  • 正则表达式允许一组字符并禁止其他字符

    我想限制用户在字段中输入以下特殊字符 Newline Carriage return 更多内容将添加到此列表中 但我最终将获得完整的限制列表 但他可以输入某些外来字符 例如 除了字母数字字符 通常的特殊字符等之外 有没有一种简单的方法来构建
  • 如何在批处理脚本中将日期和时间插入文件名? [复制]

    这个问题在这里已经有答案了 我为 Jenkins 作业编写了一个批处理脚本 该脚本编译 net 代码 步骤之一是在提取新的编译代码之前备份当前目录 我使用这些行来提取要插入到备份文件名中的日期和时间 for F tokens 2 4 del
  • Spring @Configuration(非xml配置)用于注解驱动的任务

    谁能解释如何使用 Scheduled 注释实现任务的基本配置而不需要任何 XML 配置 我能找到的所有示例都至少使用最少的 XML 配置 例如 http blog springsource com 2010 01 05 task sched
  • 如何迭代 C++ 字符串向量?

    如何迭代这个 C 向量 vector
  • 使用作用域时依赖注入的顺序

    我目前正在尝试找出 Dagger 2 我正在尝试设置 4 个范围 App User Activity Fragment 用户和活动组件是应用程序的子组件 Fragment是一个以Activity为依赖的组件 假设我的 UserSetting
  • 是否有使用 ASP.NET MVC 5 Html.EditorFor() 和 Bootstrap 3.0 的解决方案?

    问题 有没有办法让 ASP NET MVC 5 Html EditorFor 表单助手使用更改后的内容Bootstrap 3 表单语法 http getbootstrap com css forms 讨论 我已经研究过的 似乎有很多关于重写
  • Python 重写 getter 而不使用 setter

    class human object def init self name self name name property def name self return self name name setter def name self v
  • 重建 Android Instant App 后,使用功能模块中基本模块中定义的颜色失败

    我有一个base模块和一个名为的功能模块query我的即时应用程序项目中的模块 My QueryActivity inside query模块使用的颜色是base module 查询活动 kt https github com mustaf
  • 分发定制 iPhone 应用程序的正确方法是什么?

    我开发了一些应用程序商店应用程序 但最近中小型公司问我是否有兴趣开发定制应用程序 我发现与 Apple 的许可和合同有点令人困惑 至少可以说 开发人员可以制作 3 种类型的构建 应用商店 Ad Hoc 企业 不需要应用程序商店 因为这些是私
  • 在 R-markdown 中显示 tibble 的所有行和列

    我正在处理 R markdown 文件 分析结果以以下形式显示tibble但为了查看所有列和行 我需要单击展开 但是 由于我要将文件编织成 html 因此我需要显示 R markdown 文件中的所有列和行 我进行了搜索并提出了以下代码 o
  • 如果 hash['a'] 不存在,如何分配 hash['a']['b']= 'c' ?

    有没有比更简单的方法 if hash key a hash a b c else hash a hash a b c end 最简单的方法是构建你的哈希 http ruby doc org core Hash html method c n
  • css-transform 动画导致闪烁

    我的代码在这里http jsfiddle net JaB5S http jsfiddle net JaB5S 您可以单击蓝色页面来运行动画 但无论何时 您都可以看到文本闪烁 直到动画完成 右侧的文字甚至消失了 我在某处读到过backface
  • 如何知道 Spring.NET 根上下文何时加载?

    我正在运行一个 Web 服务 它使用 Spring NET 来实现 IoCness 其中一个类需要在加载时执行一些操作 我正在使用AfterPropertiesSet 和 一些东西 涉及调用ContextRegistry GetContex
  • 不包含名为的导出

    我正在尝试将一个简单的组件导入到我的 React 中 我无法找到该组件 导入组件时出现以下错误 src App js 61 28 32 componentes Menu 不包含导出 名为 菜单 这是我的简单组件 import React C
  • React Native:放置全局状态变量的位置

    我正在开发我的第一个 React Native 我再次需要一些帮助 我的应用程序有一种状态 运动 这对于组件 屏幕等非常重要 根据所选的运动 我也会加载不同的样式 图像和 api 信息 将有一个模式 用户可以从中更改运动 模式现在是 Hea