gpt4 book ai didi

typescript - Typescript 中带有 useContext 的 useState

转载 作者:行者123 更新时间:2023-12-01 22:58:46 24 4
gpt4 key购买 nike

假设我有一个基本设置来检查用户是否登录:

import { createContext } from "react";
const UserContext = createContext<string | null>(null)
export default UserContext

在我的 App.tsx 中,我想创建一个 useState Hook ,以便我可以管理整个应用程序的上下文状态:

//Context
const [context, setContext] = useState<string | null>(null)

<UserContext.Provider value={{context, setContext}}>

<Routes>

<Route path="/" element={<Home/>}/>
<Route path="/login" element={<Login/>}/>
<Route path="/register" element={<Register/>}/>
<Route path="/admin" element={<Admin/>}></Route>

</Routes>

</UserContext.Provider>

据我所知,如果我想拒绝对某些页面的访问,我只需要登录用户的名称,或者将上下文状态设置为 null。现在的问题是 typescript 在这里对我大喊大叫,特别是在 Provider 的值(value)方面:

Type '{ context: string | null; setContext: 
React.Dispatch<React.SetStateAction<string | null>>; }' is not assignable to type 'string'.ts(2322)

我可以强制转换值如下:

value={{context, setContext} as any}

但这似乎并不是一个特别优雅的“typescripty”解决方案。

感谢任何帮助!

最佳答案

根据 Alex 的回答,我想出了一个适合我的调整:

type UserContextType = {
context: string | null,
setContext: React.Dispatch<React.SetStateAction<string | null>>
}

const iUserContextState = {
context: null,
setContext: () => {}
}

const UserContext = createContext<UserContextType>(iUserContextState)

export default UserContext

然后在 App.tsx 中:

//Context
const [context, setContext] = useState<string | null>(null)

<UserContext.Provider value={{context, setContext}}>

<Routes>

<Route path="/" element={<Home/>}/>
<Route path="/login" element={<Login/>}/>
<Route path="/register" element={<Register/>}/>
<Route path="/admin" element={<Admin/>}></Route>

</Routes>

</UserContext.Provider>

关于typescript - Typescript 中带有 useContext 的 useState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72420279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com