首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以使用React中的函数提供上下文值吗?

我可以使用React中的函数提供上下文值吗?
EN

Stack Overflow用户
提问于 2020-09-01 09:28:36
回答 1查看 32关注 0票数 0

我现在问自己以下问题:是建议我直接在ContextProvider中定义状态和逻辑,还是在单独的函数中定义状态和逻辑以将代码分开一点?

示例:

代码语言:javascript
运行
AI代码解释
复制
const MyContext = React.createContext({});

const createStore = () => {
    const [myState, setMyState] = useState();
    return {
       myState,
       setMyState
    }
}

const MyContextProvider = ({ children }) => {
  const store = createStore();
  return (
     <MyContext.Provider value={store}>{children}</MyContext.Provider>
  )
}

我对createStore函数有点担心。如果提供程序重新渲染,createStore是否总是会重新创建?

编辑:谢谢你的回答!

如果我想在useCreateStore钩子中使用一个参数怎么办?参数会更新吗?

示例:

代码语言:javascript
运行
AI代码解释
复制
const MyContext = React.createContext({});

const useCustomStore= (myAwesomeValue) => {
    const [myState, setMyState] = useState();

   const doSomething = useCallback(() => {
      //
   }, [myAwesomeValue])

    return {
       myState,
       setMyState
    }
}

const MyContextProvider = ({ children, title }) => {
  const { myState } = useCustomStore(title); //You need to desctructure the returned object here, note myState
  return (
     <MyContext.Provider value={myState}>{children}</MyContext.Provider>
  )
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-01 09:42:46

你试图为你的“商店”创建的东西叫做custom hook

不过,您需要做一些更改。习惯上使用' use‘作为自定义钩子的开头。因此,这里我将createStore重命名为useCustomStore。因为它是一个带有useState的自定义钩子,所以它遵循的规则与您在上下文提供程序中实际拥有它时遵循的规则相同

此外,您的自定义钩子返回一个包含状态和突变方法的对象。您需要直接通过store.myState访问状态,也可以像我在示例中所做的那样对其进行解构{ myState}

代码语言:javascript
运行
AI代码解释
复制
const MyContext = React.createContext({});

const useCustomStore= () => {
    const [myState, setMyState] = useState();
    return {
       myState,
       setMyState
    }
}

const MyContextProvider = ({ children }) => {
  const { myState } = useCustomStore(); //You need to desctructure the returned object here, note myState
  return (
     <MyContext.Provider value={myState}>{children}</MyContext.Provider>
  )
}

等同于

代码语言:javascript
运行
AI代码解释
复制
const MyContext = React.createContext({});
  
const MyContextProvider = ({ children }) => {

  const [myState, setMyState] = useState();

  return (
     <MyContext.Provider value={myState}>{children}</MyContext.Provider>
  )
}

因此,重现器将保留状态,因为它使用了useState挂钩。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63684979

复制
相关文章
完善测试匹配符号得到特征码
封装一个偏移值,因为如果找到了特征码但是得到的是特征码的基址,我们还要知道怎么从这个基址偏移得到我们想要的内容,所以这里就在字符串里面添加一些特征码:
用户8671053
2021/09/26
7450
一些我用得到的 Python 脚本
下面的python脚本有一部分是我百度然后修改的,一部分是我自己写的,如果以后有什么新的我用的到的脚本或者这些脚本有修改我也会在这里更新,这些源码放在这里仅以备份为目的
猫猫摸大鱼
2022/07/21
8180
验证工程师经常犯的错误(4)---符号位扩展问题
在用SystemVerilog码代码的时候,经常会遇到逻辑和算术运算表达式,除了之前提到的运算符优先级问题,还有一个头疼的问题就是符号位扩展。
IC验证
2020/07/20
1.5K0
验证工程师经常犯的错误(4)---符号位扩展问题
c++使用了未定义类型_c++如何新建
第一个参数是一个指向SECURITY_ATTRIBUTES结构体的指针,一般的情况下,可以是nullptr。
全栈程序员站长
2022/11/09
3K0
我所使用的Python扩展程序 for
ActivePython-3.1.3.5-win32-x86.msi bzr-2.3.1.win32-py2.6.exe CherryPy-3.2.0-py2.win32.exe dreampie-1.1.1-setup.exe Genshi-0.6.win32.exe ipython-0.10.1.win32-setup.exe matplotlib-0.99.3.win32-py2.6.exe mod_python-3.2.5b.win32-py2.3.exe mod_python-3.2.5b.win32-py2.4.exe MySQL-python-1.2.2.win32-py2.6.exe numpy-1.5.1-win32-superpack-python2.6.exe PyQt-Py2.6-gpl-4.5.4-1.exe pysqlite-2.6.0.win32-py2.6.exe python-2.7.msi pywin32-216.win32-py2.6.exe scipy-0.8.0-win32-superpack-pytho.exe setuptools-0.6c11.win32-py2.6.exe svn-python-1.6.1.win32-py2.6.exe Twisted-11.0.0.winxp32-py2.7.msi numpy scipy Markdown-2.0.win32.exe aggdraw-1.2a3-20060212.win32-py2.6.exe Tkinter wxpython pythonwin java swing pygtk pyqt ---- highlight-setup-3.4.exe ------- Psyco Pyrex PyPy Weave NumPy ctypes Tkinter wxPython PythonWin Java Swing PyGTK PyQt Paycopg MySQLdb Pygame PyXML ReportLab RepltC
py3study
2020/01/15
8340
我开源了一个思维导图
我对思维导图最初的了解来源于我的老婆,她很喜欢用思维导图来记录各种东西,看的多了,作为一个前端,就会好奇这东西是怎么实现的,于是我在网上搜了一下,看到了一篇介绍思维导图基本结构--逻辑结构图的一种布局算法,然后我就想,布局算法有了,我再实现一下节点内容渲染、节点连线、展开收起、编辑之类的功能不就可以实现一个简单的思维导图了么,顺便还可以产出一篇文章,是的,能写文章是我做这个的最大动力。
街角小林
2023/08/16
1.3K3
我开源了一个思维导图
盘点一个Python导包的问题
前几天在Python白银群【王者级混子】问了一个Python导包的问题,这里拿出来给大家分享下。
前端皮皮
2023/08/17
1840
盘点一个Python导包的问题
C 和 C++ 中的未定义行为
theme: channing-cyan highlight: a11y-dark
鲸落c
2022/11/14
5.1K0
C++ 中有符号类型到无符号类型的转换
为了更好地解释下面的代码,先来介绍一些背景知识,在我的计算机中, char 类型占 8 个比特位,那么, unsigned char 类型能表示的数的范围为 0 ~ 2的8次方 - 1,即 0 ~ 255,共 256 个数;int 类型占 32 个比特位,那么 unsigned 类型所能表示的数的范围为 0 ~ 2的32次方 - 1,即 0 ~ 4294967295,共 4294967296 个数,接下来看下面的代码:
用户7886150
2021/02/15
1.7K0
Java得到年在一个季度的错误的第一天
而FisrtDayOfMonth.getFisrtDayOfMonth(year, month)是String类型的,format()方法内的事对象或者是Date类
全栈程序员站长
2022/07/06
3960
Maven 错误找不到符号
当碰到maven错误:找不到符号问题时,通常第一反应应该是执行eclipse的Project -> Clean … -> Clean all projects,然后再执行maven clean,将项目清理一下,然后再试试,如果还是不能解决接着往下看。
我是李超人
2020/08/20
7.9K0
使用 C 或 C++ 扩展 Python
如果你会用 C,添加新的 Python 内置模块会很简单。以下两件不能用 Python 直接做的事,可以通过 extension modules 来实现:实现新的内置对象类型;调用 C 的库函数和系统调用。
tunsuy
2022/10/27
1.4K0
我曾得到的最佳编程建议
我曾得到的最佳编程建议   这是一个有关于我得到的一些专业性编程建议的故事,以及它如何影响了我的职业生涯。我真心觉得此建议真可谓是字字珠玑,所以我想分享给大家。  建议   还是在1996年,我刚
用户1289394
2018/02/27
8410
我曾得到的最佳编程建议
C++鲜为人知的符号
这些鲜为人知的C++符号,可直接在代码中使用,但实践中不推荐这么做,可作为茶余饭后的乐趣了解C++的另一面。
一见
2018/08/10
3380
Python中的符号
1.算数运算符 2.复合赋值运算符 3.常用的格式符号
py3study
2020/01/10
3.1K0
使用C++编写Python3扩展
Python的很多库中都包含了C/C++的代码,在安装这种库的时候,尝尝会遇到这样的报错:
带萝卜
2020/10/23
9890
Python 格式化符号%s和f’{表达式}’的扩展用法
需求: 利用格式化符号%s来输出数据 ---- 我的名字是n,去年n岁了,体重是n
python自学网
2022/03/03
1.2K0
C++使用ffpython嵌入和扩展python
摘要: 在服务器编程中,经常会用到python脚本技术。Python是最流行的脚本之一,并且python拥有定义良好的C API接口,同时又有丰富的文档,与C++结合非常的适合。通常情况下使用C++封装机制,而用python脚本实现策略或者是控制。使用python和C++结合的技术拥有如下优势: l  主体系统使用C++实现,保持系统的高效。 l  控制部分使用python,增加开发效率,python的内存垃圾回收,丰富的类库都使C++开发者获益匪浅。 l  Python脚本可以运行期重载,可以实现控制部分
知然
2018/03/09
1.4K0
Python中使用MinGW编译C++扩展
Python中可以使用 python setup.py build -c mingw32 install 安装包含C++扩展的第三方库,但需要先安装MinGW 5.1.4及以后版本,并将C:\MinGW\bin目录加入到环境变量。 安装过程中可能会出现以下错误: gcc: error: unrecognized command line option ‘-mno-cygwin’ 解决方法:修改C:\Python27\Lib\distutils\cygwinccompiler.py文件,去掉里面出现的-
drunkdream
2018/07/06
1.3K0
点击加载更多

相似问题

Laravel -如何在视图中获取输入值

117

Laravel模态形式输入路径作为参数

11

iOS:在iPad模态视图中获取键盘点?

34

在Laravel视图中获取clientOriginalName

10

如何用Laravel在模态视图中显示cmd线输出数据

10
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档