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

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

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

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

示例:

代码语言:javascript
代码运行次数:0
运行
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
代码运行次数:0
运行
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
代码运行次数:0
运行
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
代码运行次数:0
运行
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

复制
相关文章
「React进阶」我在函数组件中可以随便写 —— 最通俗异步组件原理
接下来的几篇文章将围绕一些‘猎奇’场景,从原理颠覆对 React 的认识。每一个场景下背后都透漏出 React 原理,
用户6835371
2021/10/18
3.8K0
「React进阶」我在函数组件中可以随便写 —— 最通俗异步组件原理
箭头函数中的'this'值
那么 为什么hobby的值输出成功,而name不能够输出呢?是因为lucifer丑吗?其实那只是其中一个因素,还有一个因素就是在ZnHobbies方法中的this已经不属于上一个区块,而这里的this并没有name值。所以 解决办法的其中一个就是在ZnHobbies函数中写入
学前端
2020/04/07
2.2K0
我可以弃用这个端点吗?
让我们假设你是一个开发人员,接管了 Catalog 微服务的所有权。你被要求弃用/v1/catalog 端点而使用新的/v2/catalog 端点。你该怎么做呢?
CNCF
2022/03/25
1.7K0
我可以弃用这个端点吗?
Python这么火,我可以学吗?
越来越多行业都在应用的Python,主要的应用领域有哪些呢?Python每个人都可以学吗?今天我们就来详细看一下。
老九君
2020/03/11
1.2K0
react中类组件传值,函数组件传值:父子组件传值、非父子组件传值[通俗易懂]
函数组件中我们一般情况下使用useEffect实现数据的请求 // useEffect Hook 看做 componentDidMount,componentDidUpdate 和 componentWillUnmount (加载,更新,卸载)这三个函数的组合。 语法格式: useEffect(()=>{ },[])
全栈程序员站长
2022/08/30
6.3K0
React中的setState是异步的吗?
在React中更新状态,一般的写法都是this.setState({a:1}),而非Vue那样this.a = 1。并且,如果在如下场景:
娜姐
2020/09/22
2.2K0
React中的setState是异步的吗?
你知道 Chrome 专门为调试提供的这些函数吗?
在 Chrome 的 DevTools 中的控制台提供了一些 Debug 专用的函数,每一个都身怀绝技。
疯狂的技术宅
2020/11/26
1.6K0
我应该使用 PyCharm 在 Python 中编程吗?
Python 是一种广泛使用的编程语言,以其简单、多功能和庞大的开发人员社区而闻名。这个社区不断创建新的库和工具,以提高Python编程的效率和便利性。选择正确的环境来编写和调试 Python 代码可能具有挑战性,但 PyCharm 是一个很好的选择,从其他选项中脱颖而出。
很酷的站长
2023/02/20
4.7K0
我应该使用 PyCharm 在 Python 中编程吗?
使用React.Fragment替代render函数中div的包裹
1、在 React 中,render 函数中 return 的内容只能有一个根节点,如果多个元素嵌套,需要用一个标签元素包裹 这个包裹的标签通常用 div,示例如下: class App extend
Leophen
2019/08/23
2K0
使用React.Fragment替代render函数中div的包裹
在推荐系统中,我还有隐私吗?联邦学习:你可以有
随着互联网覆盖范围的扩大,越来越多的用户习惯于在网上消费各种形式的内容,推荐系统应运而生。推荐系统在我们的日常生活中无处不在,它们非常有用,既可以节省时间,又可以帮助我们发现与我们的兴趣相关的东西。目前,推荐系统是消费领域最常见的机器学习算法之一[1]。以网络新闻为例,由于每天都有大量的新闻文章发布在网上,在线新闻服务的用户面临着严重的信息过载。不同的用户通常喜欢不同的新闻信息。因此,个性化新闻推荐技术被广泛应用于用户的个性化新闻展示和服务中。关于新闻的推荐算法 / 模型研究已经引起了学术界和产业界的广泛关注。
机器之心
2020/12/03
4.7K0
在推荐系统中,我还有隐私吗?联邦学习:你可以有
箭头函数与普通函数(function)的区别是什么?构造函数(function)可以使用 new 生成实例,那么箭头函数可以吗?为什么?
4.箭头函数不可以做构造函数,不能使用new 关键字,因为new关键字是调用函数对象的constructor属性,箭头函数中没有该属性,所以不能new
刘嘿哈
2022/10/25
2K0
箭头函数与普通函数(function)的区别是什么?构造函数(function)可以使用 new 生成实例,那么箭头函数可以吗?为什么?
Matlab中插值函数汇总和使用说明
MATLAB中的插值函数为interp1,其调用格式为:  yi= interp1(x,y,xi,'method')           
AIHGF
2019/02/18
5.5K0
Matlab中插值函数汇总和使用说明
“我是零基础小白,我可以转行大数据吗?”
我们在做出一个决定之前总是会有这样那样的担忧和犹豫,特别是当自身厌倦了目前的工作和生活,思考未来的时候。“我要不要继续过这样的生活?”“我要不要待在舒适圈?”“我要不要转行?转行的话我没有经验,会不会不太好?”这其实就是我们做决定前的常态,特别是在如今高压的生活下。想要赚钱,但又迟迟不能做出决定。其实当你有这样那样的犹豫师,你心里已经有一个答案了,只是你没有勇气去做。如果你想获得高薪,大数据行业的确可以成为你转行的首选。
成都加米谷大数据
2021/03/10
6780
“我是零基础小白,我可以转行大数据吗?”
构造函数和析构函数可以是虚函数吗,在里面能调用虚函数吗
在内存上,我们知道,一个对象会有一个虚函数表,虚函数表在构造函数中初始化,可是一个对象还没有完成实例化,他的虚函数表是不存在的,一个对象需要调用构造函数完成实例化,这里形成了一个悖论
opencode
2022/12/26
1.6K0
[C#]我自己写的一个对字节中每位进行修改值的函数
byte初始状态: 11111111 byte修改第0位后的结果: 01111111 byte修改第1位后的结果: 00111111 byte修改第2位后的结果: 00011111 byte修改第3位后的结果: 00001111 byte修改第4位后的结果: 00000111 byte修改第5位后的结果: 00000011 byte修改第6位后的结果: 00000001 byte修改第7位后的结果: 00000000
静默虚空
2022/05/07
2.1K0
JS 中 this上下文对象的使用方式
JavaScript 有一套完全不同于其它语言的对 this 的处理机制。 在五种不同的情况下 ,this 指向的各不相同。
书童小二
2018/09/03
1.8K0
JS 中 this上下文对象的使用方式
python中函数的返回值详解
在本小节刚开始的时候,说过的“买烟”的例子中,最后儿子给你烟时,你一定是从儿子手中接过来 对么,程序也是如此,如果一个函数返回了一个数据,那么想要用这个数据,那么就需要保存
Python学习者
2023/03/27
3.3K0
每日一问06 构造函数可以是虚函数吗
https://www.bilibili.com/video/BV1Kb411B7N8
早起的鸟儿有虫吃
2021/01/05
7110
每日一问06 构造函数可以是虚函数吗
点击加载更多

相似问题

我可以为react测试库中的所有呈现函数使用提供程序吗?

119

我可以在函数中调用React吗?

10

我可以用opencv提供的函数替换这个插值函数吗?

10

React Context Api使用上下文提供程序中的函数

110

使用子组件更新react上下文提供程序值

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文