【发布时间】:2020-08-20 13:38:17
【问题描述】:
我的应用中有几个嵌套的上下文提供程序,看起来像这样
export const LangContext = React.createContext("javascript");
export const FontContext = React.createContext("mono-space");
export const FontSizeContext = React.createContext("16px");
const Store = ({ children }) => {
const [lang, setLang] = useState("javascript");
const [font, setFont] = useState("mono-space");
const [fontSize, setFontSize] = useState("16px");
return (
<LangContext.Provider value={[lang, setLang]}>
<FontContext.Provider value={[font, setFont]}>
<FontSizeContext.Provider value={[fontSize, setFontSize]}>
{children}
</FontSizeContext.Provider>
</FontContext.Provider>
</LangContext.Provider>
);
};
我确定这是一种不好的做法,但我不确定如何处理。我希望能够为所有上下文创建一个上下文提供程序。
【问题讨论】:
-
这不是一个坏习惯。事实上,如果您使用带有状态和调度上下文的减速器,您可能需要进一步分解它们。需要注意的是,如果我们的组件只需要例如字体上下文值,它不应该在 lang-context 更新时重新渲染。所以最好分解上下文。但是,您可能希望对上下文进行逻辑分组。例如,您提到的所有内容似乎都属于单个主题上下文
标签: javascript reactjs react-native react-hooks react-context