reactjs - React 上下文提供程序不显示默认值
问题描述
我正在努力使我的项目井井有条。所以我创建了一个config
文件夹,在其中放置了一个context
文件夹。在context
文件夹中,我想处理所有上下文。
所以我有index.ts
如下:
import { ThemeContextProvider } from './context';
export default ThemeContextProvider;
以及包含以下内容的context.tsx
文件:
import { createContext } from 'react';
export const ThemeContext = createContext({});
export const ThemeContextProvider = ThemeContext.Provider;
在我的app.tsx
我有
import React from 'react';
import ThemeContextProvider from './config/context';
import theme from './theme';
export default function App() {
return (
<ThemeContextProvider value={theme}>
...
</ThemeContextProvider>
);
}
以上工作。但我想将主题移入context.tsx
并默认加载它,这样我App.tsx
就尽可能保持干净
所以在context.tsx
我更改为:
import { createContext } from 'react';
import theme from '../../theme';
export const ThemeContext = createContext(theme);
export const ThemeContextProvider = ThemeContext.Provider;
在App.tsx
我更改<ThemeContextProvider value={theme}>
为<ThemeContextProvider>
React 立即抱怨<ThemeContextProvider>
并想要这个value
道具。当我通过value={}
并尝试从上下文中获取默认值时,它们不再存在。
任何想法发生了什么,并就如何处理它提出建议,并就最佳实践提出建议?也许我做错了?
解决方案
您可以创建另一个组件来包装内容并将主题传递给上下文提供者
import { createContext } from 'react';
import theme from '../../theme';
export const ThemeContext = createContext({});
export const ThemeContextProvider = ThemeContext.Provider;
export const YourContextProvider = ({ children }) => (
<ThemeContextProvider value={theme}>
{children}
</ThemeContextProvider>;
);
然后在app组件中使用
import React from 'react';
import YourContextProvider from './config/context';
export default function App() {
return (
<YourContextProvider>
...
</YourContextProvider>
);
}
您仍然可以YourContextProvider
根据ThemeContextProvider
需要命名,但我不建议这样做。以后的维护可能很难遵循。
推荐阅读
- java - 取消循环后,我试图让 toString 一起打印出来
- python-3.x - 定义一个单词列表并检查这些单词中的任何一个是否存在于文本正文中
- node.js - TypeError:无法使用 discord.js 读取属性“”错误
- python - 具有相同索引下的两个实例的 Python DataFrame
- linux - 使用 powershell 的最简单的 XML-RPC 查询示例?
- google-analytics - 在 Google Analytics(分析)“站点内容”下也看到我的 UTM 代码活动是否正常?
- angular - Angular 在所有路由上保留 queryParam
- wordpress - 将术语与 Wordpress 中帖子 ID 的元键相关联
- python - 使用 Zappa 和 Windows 10 时无法从“flask”导入名称“Flask”
- javascript - 如何一次过滤多个对象属性?