gpt4 book ai didi

javascript - 处理嵌套上下文提供程序

转载 作者:行者123 更新时间:2023-12-04 04:11:39 24 4
gpt4 key购买 nike

我的应用程序中有一些嵌套的上下文提供程序,如下所示

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>
);
};

我确定这是一种不好的做法,但我不确定如何处理。我希望能够为所有上下文创建一个上下文提供程序。

最佳答案

您可以简单地使用单个提供程序并将所需的值作为对象传递:

export const StoreContext = React.createContext({});
const Store = ({ children }) => {
const [lang, setLang] = useState("javascript");
const [font, setFont] = useState("mono-space");
const [fontSize, setFontSize] = useState("16px");
return (
<StoreContext.Provider value={{lang, setLang, font, setFont, fontSize, setFontSize}}>
{children}
</StoreContext.Provider>
);
};

除了使用 useState 之外,您还可以修改上面的内容以使用 useReducer 并使 API 更简单:

const initialState= {
lang: 'javascript',
font: 'mono-space',
fontSize: '16px',
}

const reducer = (state, action) => {
switch (action.type) {
case 'SET_LANG': return {...state, lang: action.payload}
case 'SET_FONT': return {...state, font: action.payload}
case 'SET_FONTSIZE': return {...state, fontSize: action.payload}
default: return state;
}
}
export const StoreContext = React.createContext({});
const Store = ({ children }) => {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<StoreContext.Provider value={[state, dispatch]}>
{children}
</StoreContext.Provider>
);
};

在 child 身上你可以像这样使用它:

const Child = () => {
const [state, dispatch] = useContext(StoreContext);
const handleChange = (size) => {
dispatch({type: 'SET_FONTSIZE', payload: size})
}
....
}

关于javascript - 处理嵌套上下文提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61620841/

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