【发布时间】:2020-07-10 15:31:53
【问题描述】:
所以我正在尝试使用一个自定义钩子,该钩子利用了 useContext,我希望在 ToastContext 更改时重新渲染我的 ToastContainer 组件。但是,当上下文更改时,ToastContainer 组件不会重新呈现。使用开发工具时,我可以看到上下文确实被钩子改变了,但是没有显示新数据。
抱歉所有代码,我只是不确定错误在哪里
使用Toast.js
function useToast () {
let [toasts, setToasts] = useContext(ToastContext)
function createToast(message, color, duration = 0) {
let id = Math.floor(Math.random() * 1000)
toasts.set(id, <Toast {...{ message, color, duration, id }} />)
setToasts(toasts)
if (duration) {
setTimeout(() => { toasts.delete(id); setToasts(toasts)}, duration * 1000)
}
}
return [toasts, createToast]
}
ToastContainer.js
function ToastContainer (props) {
let [toasts, setToasts] = useContext(ToastContext)
return( <> {[...toasts.values()]} </>)
}
page.js
function Page (props) {
let [toasts, createToast] = useToast()
createToast("hello", 'red')
createToast("world", 'yellow')
return(<Article />)
}
app.js
function App({Component, pageProps}) {
const toastState = useState(new Map())
return (
<>
<ToastContext.Provider value={toastState}>
<ToastContainer/>
<main>
<Component {...pageProps}></Component>
</main>
</ToastContext.Provider>
</>
)
【问题讨论】:
标签: javascript reactjs react-hooks react-context