如何在同一个组件中初始化和使用上下文?

2024-02-23

我有一个名为 SortContext 的上下文。我想做的是初始化这个上下文(创建它的提供者),然后在同一个组件中使用该上下文。这可能吗?

例如:

export default function MyComponent ({children}) {

    const mySortValue = useContext(SortContext)

    return (
        <SortContext.Provider value={'exampleValue'}>
            {children}
        </SortContext.Provider>
    )
}

在此组件中,变量 mySortContext 将无法访问值“exampleValue”,因为直到 useContext 挂钩之后才创建此上下文。

或者:

export default function MyComponent ({children}) {

    return (
        <SortContext.Provider value={'exampleValue'}>
            <SortContext.Consumer>
                {context => {
                   const mySortValue = useContext(SortContext)
                   return children
                }}
            </SortContext.Consumer>
        </SortContext.Provider>
    )
}

这样的东西不起作用,因为该函数不能使用反应钩子。

显然,我可以创建一个新组件,将其放在 标记中,然后访问那里的上下文,但是有什么方法可以在一个组件中完成这一切吗?

//边注 为了提供一些关于为什么我想要这个的背景信息,我使用上下文来建立一些有关如何对数据进行排序的信息。我希望上下文中的任何组件都可以访问这些数据。如果我想在单个组件中包含一个简单的按钮、数据列表和排序功能,那么创建两个组件似乎有点过分了;一个用于为其提供排序上下文,另一个用于托管排序按钮和数据。


如果不创建另一个组件,这是不可能的。

这里的 React js beta 文档的“陷阱”框中提到了这一点(向下滚动一点):https://beta.reactjs.org/apis/usecontext#passing-data-deeply-into-the-tree https://beta.reactjs.org/apis/usecontext#passing-data-deeply-into-the-tree

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

如何在同一个组件中初始化和使用上下文? 的相关文章

随机推荐

  • dll 的环境变量与 exe 的环境变量不同

    我正在调试一个 64 位应用程序 其中 c exe 使用本机 c dll 在 Windows 7 上 这两个应用程序的环境变量似乎不同 即使它们都在同一进程中执行 调用 System Environment SetEnvironmentVa
  • 您将如何对此进行逆向工程?

    我有一些代码位于 javascript 中的 php 文件的底部 它经历了很多奇怪的扭曲 比如将十六进制转换为 ascii 然后进行正则表达式替换 执行代码等等 有没有办法在它实际执行之前找出它正在执行的内容 代码在这里 http past
  • ASP.NET MVC 4:无法修改 jQuery Unobtrusive Ajax

    Using ASP NET MVC 4 and NuGet来管理包 升级到后jQuery 1 9 1 via NuGet 我开始得到JavaScript关于删除的错误live 函数于jQuery 1 9 x 我按 F5 从 VS NET 以
  • 三个 js - 克隆着色器并更改统一值

    我正在努力创建一个着色器来生成带有阴影的地形 我的出发点是克隆兰伯特着色器并使用 ShaderMaterial 最终用我自己的脚本对其进行自定义 标准方法效果很好 var material new MeshLambertMaterial m
  • 我缺少哪些 LinkedIn API 权限来获取组织目标名称?

    使用 LinkedIn API v2 0 我目前正在尝试获取他们作为管理员的经过身份验证的用户的组织 ID 和名称列表 我可以使用以下方法获取所有组织 ID https api linkedin com v2 organizationalE
  • pandas:如何在按列分组后获得第一个正数?

    我有一个 pandas 数据框 例如 a b id 1 10 6 1 2 6 3 1 3 3 12 1 First time id 1 has a b value over 10 4 4 23 2 First time id 2 has a
  • Safari 不会通过 HTTPS 播放 mp4

    我有一个文件sample html 其中仅包含以下代码
  • 在tinymce中禁用自动moxieplayer换行

    我构建了一个功能 可以上传 转换视频 然后将视频嵌入到tinymce 中 Tinymce 使用他们的 moxieplayer swf 不断用一些 html 封装我的视频嵌入 我想对这些视频使用自定义视频播放器 但当 tinymce 的行为如
  • 交错 NumPy 数组[重复]

    这个问题在这里已经有答案了 我正在尝试按如下方式交错数组 import numpy as np x np array 1 2 3 4 5 y np array 4 6 2 6 9 5 9 8 7 4 3 2 5 4 9 期望的结果 1 2
  • 设定差值的输出可以存储在第一个输入中吗?

    如果我有 2 个向量 或双端队列 我可以将它们的 set difference 存储在第一个向量中吗 又名来自 cpp wiki 参考的示例 std vector
  • 比较不匹配正则表达式的速度

    下面的 Python 代码非常慢 import re re match a c a 30 b 如果用更大的常数替换 30 情况会变得更糟 我怀疑由于连续的解析歧义 是罪魁祸首 但我在正则表达式解析和匹配方面不是很专家 这是Python正则表
  • 提取关键属性 mongocxx

    我试图通过 mongocxx 仅提取关键属性 但使用 find 和 find one 函数 我无法仅提取关键值 int main int char mongocxx instance inst mongocxx client conn mo
  • 为什么在 C 中使用 atoi() 会得到这个意想不到的结果?

    我不明白以下 C 代码的结果 main char s AAA advanceString s void advanceString p 3 int val atoi p printf The atoi val is d n val 这里的a
  • 使用 FileSystemWatcher 观察 log4net 日志文件

    我创建了简单的 WPF 控件来监视日志文件中的更改 我使用 FileSystemWatcher 来监视特定文件 我的配置 Directory System IO Path GetDirectoryName logFileFullPath F
  • Swift -Ounchecked 和断言

    Preface 在斯威夫特中 ENABLE NS ASSERTIONS被忽略 断言是打开还是关闭取决于SWIFT OPTIMIZATION LEVEL 浏览此处获取更多信息 http blog krzyzanowskim com 2015
  • 两个多边形的最近点

    我有两个多边形 我想获得最小距离 并测量该距离之间的点 当然 这样的点很可能位于两个节点之间的边缘 这是一个例子 我正在寻找一种算法 可以给我绿色距离和两个点 如果多边形不相交 您可以这样做 如果有多边形 A 和多边形 B 则 A i 和
  • 在 wget 或curl 查询中使用通配符

    从目录下载时是否可以在 wget 查询中使用通配符 基本上 我有一个网站 www download example com dir version package rpm 然而 版本目录一直在变化 有时包含多个RPM包 是否有一个 wget
  • 如何在有可用空间(如密度扫描仪)的 pdf 上插入图像或图章

    我有一个 pdf 文件 我在其中的所有页面上添加了图章 但是 问题是 图章被添加到每个页面的左上角 如果页面的该部分有文本 则标记会出现在文本上 我的问题是 有什么方法可以阅读每一页 如果该部分没有文本 请添加图章 否则搜索最近的可用可用空
  • onCreateOptionsMenu(Menu 菜单) 和 onPrepareOptionsMenu(Menu 菜单) 有什么区别?

    解释一下之间的区别onCreateOptionsMenu Menu menu and onPrepareOptionsMenu Menu menu onCreateOptionsMenu 被调用一次 onPrepareOptionsMenu
  • 如何在同一个组件中初始化和使用上下文?

    我有一个名为 SortContext 的上下文 我想做的是初始化这个上下文 创建它的提供者 然后在同一个组件中使用该上下文 这可能吗 例如 export default function MyComponent children const