const handleAddFruits = useCallback(() => {
setFruits(fruits=>[...fruits, `Fruit${fruits.length + 1}`]);
},[]);
const handleAddVegies = useCallback(() => {
setVegies(vegies=>[...vegies, `Vegie${vegies.length + 1}`]);
},[]);
const vegiesValue=useMemo(()=>({ vegies, handleAddVegies }),[vegies,handleAddVegies])
const fruitsValue=useMemo(()=>({ fruits, handleAddFruits }),[fruits,handleAddFruits])
return (
<ContextVegies.Provider value={vegiesValue}>
<ContextFruits.Provider value={fruitsValue}>
{children}
</ContextFruits.Provider>
</ContextVegies.Provider>
这解决了在 FridgeContext
中的问题。
如果你想尝试这个库 react-context-slices,它可以让你快速轻松地处理上下文。你可以使用这个库来做到这一点:
import getHookAndProviderFromSlices from "react-context-slices"
export const {useSlice, Provider} = getHookAndProviderFromSlices({
count: {initialArg: 0},
})
import {useSlice} from "./slices"
const App = () => {
const [count, useCount] = useSlice("count")
return <>
<button onClick={() => setCount(c => c + 1)}>+</button>{count}
</>
}
react-memo
或类似的东西了吗?得到答案了吗?我尝试将提供程序分离到兄弟组件中,但不起作用。 - tanmoy