我有以下代码:
import React, { useState } from 'react'
export const NumberContext = React.createContext()
export function NumberProvider({ children }) {
const [numbers, setNumbers] = useState([])
function addNumber(number) {
const copy = [...numbers]
copy.push(number)
setNumbers(copy)
}
return (
<NumberContext.Provider value={[numbers, addNumber]}>
{children}
</NumberContext.Provider>
)
}
export function App() {
return (
<NumberProvider>
<DisplayNumbers />
<AlterNumbers />
</NumberProvider>
)
}
export function DisplayNumbers() {
const [numbers, addNumbers] = useContext(NumberContext)
return (<p>{numbers}</p>)
}
如果我现在addNumber()
像这样通过提供程序中的 Context api 调用该函数
export function AlterNumbers() {
const [numbers, addNumber] = useContext(NumberContext)
function alterNumbers(){
addNumber(1)
setTimeout(() => {
addNumber(2)
}, 3000)
}
return (<button onClick={alterNumbers}>)
}
numbers
等于[2]
而不是[1, 2]
我的提供程序函数中的状态NumberProvider
不会像NumberContext.Provider
. 我怎样才能防止这种情况发生?实现这一点的设计模式会是什么样子?