- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Provider
它通过两个 contexts
提供了一个状态变量及其对应的 setter .
const BookedBatchContext = createContext({})
const SetBookedBatchContext = createContext(null)
const initialState = {
id: null
}
Provider
看起来像这样:
export const BookedBatchProvider = ({ children }: { children: any }) => {
const [bookedBatch, setBookedBatch] = useState(localState ||initialState)
return (
<SetBookedBatchContext.Provider value={setBookedBatch}>
<BookedBatchContext.Provider value={bookedBatch}>
{ children }
</BookedBatchContext.Provider>
</SetBookedBatchContext.Provider>
)
}
setBookedBatch
可用于其他组件:
export const useBookedBatch = () => {
const bookedBatch = useContext(BookedBatchContext)
const setBookedBatch = useContext(SetBookedBatchContext)
return { bookedBatch, setBookedBatch }
}
setBookedBatch
时函数,我在给定组件中出现以下错误:
setBookedBatch(selectedBatch)
TS2721: Cannot invoke an object which is possibly 'null'.
useState
的二传手function 是我没有创建的函数,我不知道在创建上下文时如何初始化它:
const SetBookedBatchContext = createContext(null)
最佳答案
React.createContext
的返回类型和 React.useState
由您传入的初始值的推断确定。
1.) 您可以通过手动指定泛型类型来创建正确的上下文类型:
const SetBookedBatchContext = createContext<null | React.Dispatch<React.SetStateAction<State>>>(null)
useState
的 setter有类型
React.Dispatch<React.SetStateAction<State>>
,其中
State
随便
localState || initialState
是。
useBookedBatch
,那
setBookedBatch
不是
null
:
export const useBookedBatch = () => {
const bookedBatch = useContext(BookedBatchContext)
const setBookedBatch = useContext(SetBookedBatchContext)
if (setBookedBatch === null) throw new Error() // this will make setBookedBatch non-null
return { bookedBatch, setBookedBatch }
// returns: { bookedBatch: {}; setBookedBatch: React.Dispatch<React.SetStateAction<State>>; }
}
setBookedBatch
稍后可以在没有断言的情况下调用:
const App = () => {
const { setBookedBatch } = useBookedBatch()
useEffect(() => { setBookedBatch({ id: "foo" }) }, [])
}
关于reactjs - 如何在 createContext 中为 TypeScript 初始化 useState 的 set 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60712598/
我正在尝试在我的应用程序中使用新的 React Context API。我的应用程序还使用 flow 作为类型。一旦我将 //@flow 添加到包含代码的文件的顶部: const MyContext
我正在尝试使用 createContext 构建上下文来自 react API: import React, { useState, createContext } from 'react'; exp
考虑我的例子: const itemStructure = { a: [ "d", "c" ], b: [ "e", "f" ] }; const Context = React.create
日志说 java.lang.RuntimeException: createContext failed: EGL_SUCCESS at android.opengl.GLSurfa
我刚刚了解了 createContext Hook ,我想知道在整个项目中全局使用多个上下文的最佳方法是什么。 根据我的观察,如果您想创建和使用多个上下文,那么使用多个嵌套的 Context 标记会显
我正在尝试使用 React Context Hook 和 typescript 传递 todos(初始状态)和 addNewTodo(方法)。我尝试了多种解决方案但没有成功,仍然出现错误。 Parti
我正在尝试为应用程序所需的所有组件创建一个共享的全局状态,而不是依赖 props 钻探或 redux,而是尝试使用 React Context 来实现这一目标。 当我在路由之间切换时,为什么我的用户上
我在运行 react native 应用程序时收到“React.createContext 不是函数”错误。我在代码中搜索了“createContent”,它不存在。 知道错误的原因是什么。 它是一个
假设我想为“ Accordion ”(一组可折叠面板)创建一个 UI 组件。父组件控制哪些面板打开的状态,而子面板应该能够读取上下文以确定它们是否打开。 const Accordion = ({ ch
我正在尝试使用 Open GLESv2 创建 GPGPU 程序。我已经在我发现的一些演示中提出了这个想法,现在我正在实现它。不过,我仍然坚持创建渲染上下文。 我不需要显示任何东西,所以我创建了一个 P
在solid-js中,使用context有什么好处? , 当我们可以创建一个 signal并从存储全局存储类文件中导入它的 getter/setter/甚至是内存值?: // ./store/myVa
在solid-js中,使用context有什么好处? , 当我们可以创建一个 signal并从存储全局存储类文件中导入它的 getter/setter/甚至是内存值?: // ./store/myVa
我正在关注this示例代码,并且想知道是否可以在处理程序方法内部获取完整的 http GET 请求?例如我有 http://localhost:8000/test?param1=value1¶
我正在使用 Emulator 7.1.1(Google Apis)。完全异常(exception)是 E/AndroidRuntime: FATAL EXCEPTION: GLThread
我有这个 .js 片段,我需要将其翻译成 Typescript。 import React from 'react'; const FirebaseContext = React.createCont
所以我在使用 React Context + Typescript 时遇到了一个非常奇怪的问题。 Working example 在上面的示例中,您可以看到我正在尝试做的实际工作。本质上,我是在使用新
我有一个带有状态提供程序的 React 上下文文件来管理 cookie 首选项。一切都按预期工作,但我遇到了 1 个 Typescript 问题。我的文件如下所示: import Cookies fr
本文整理了Java中org.apache.commons.configuration.tree.xpath.XPathExpressionEngine.createContext()方法的一些代码示例
我使用 ActiveMq 作为提供者和 JMS 2.0 API。第二行抛出AbstractMethodError,如何解决? 1. ConnectionFactory factory = new Ac
在我的应用程序中,我创建了 CreateContext,然后是 RunInContext。我只需要添加对上下文中某些 Node 模块的访问。我知道如何添加我自己的 Javascript 方法,但是当我
我是一名优秀的程序员,十分优秀!