reactjs - 使用上下文在 react 应用的根目录中配置 apollo 链接
问题描述
我有以下提供者/钩子,
interface IAccessTokenContext {
accessToken: string
setAccessToken: (token: string) => void
}
const accessTokenContext = createContext<IAccessTokenContext | null>(null)
export const AccessTokenProvider: FC = ({ children }) => {
const [accessToken, setAccessToken] = useState("")
const memoizedContextValue = useMemo(
() => ({
accessToken,
setAccessToken,
}),
[accessToken, setAccessToken]
)
return (
<accessTokenContext.Provider value={memoizedContextValue}>
{children}
</accessTokenContext.Provider>
)
}
export const useAccessToken = () => {
const context = useContext(accessTokenContext)
if (!context) {
throw Error("Need context")
}
return context
}
我想知道是否可以在我的应用程序的根目录中使用上下文,我认为这是不可能的,因为我想访问令牌并将其设置在根目录以及组件内部,所以可能是另一种方法
const cache = new InMemoryCache()
const { accessToken, setAccessToken } = useAccessToken()
const requestLink = new ApolloLink(
(operation, forward) =>
new Observable(observer => {
let handle: ZenObservable.Subscription
Promise.resolve(operation)
.then(operation => {
if (accessToken) {
...
ReactDOM.render(
<ApolloProvider client={client}>
<App />
</ApolloProvider>,
document.getElementById("root")
)
解决方案
上下文不仅可以存储值,还可以存储对象或函数。
在顶级组件中使用状态。
const [token, setToken] = useState() ;
<TokenSetterContext.Provider value={setToken} >
并将此状态管理到您现有的上下文或类似方法中。
推荐阅读
- swift - 在 SpriteKit 中没有执行纹理的简单动画
- python - 如何查找在 30 天内进行第二次购买的第一次购买日期?
- python - 使用 python-docx 模块将 HTML 转换为 word 文档
- typescript - 在 Typescript 云功能中导入 Firebase 客户端 SDK 时出错
- javascript - 如何将数组对象保存到 Chrome 本地存储中
- react-native-android - 在反应本机应用程序中弹出后刷新android资产
- php - 找不到cron命令-CentOS 7
- go - 在 golang 程序中运行交互式 shell 脚本
- reactjs - 带钩子的 useEffect 给了我一个警告信息
- html - 如何将我的文本调整为我的屏幕尺寸,并固定位置