我有一个用于通知小部件的自定义挂钩useNotifications
。这个钩子返回一个包含下一个元素的数组(它类似于 ant.design 消息 api):
add
:添加新通知的函数remove
:获取通知 ID 并删除通知的函数contextHandler
:传递到组件渲染的 JSX当用户调用add
时,他们会获得一个可用于删除通知的ID
该问题专门针对删除功能。由于我在添加新通知后立即调用此函数,因此该函数会收到旧列表的副本,因此没有新元素,并且会引发错误。我该如何修复它,以便组件使用相同的 API?
useNotification 钩子 我如何使用它
Codesandbox(为了测试,我做了setTimeout
,它在3秒内调用了remove()
):https://codesandbox.io/s/goofy-smoke-5q7dw3?文件=/src/App.js:405-440
您可以使您的
remove
函数使用 状态更新器功能,可以访问最新的状态值。这允许您在组件在remove()
中重新渲染之前访问新的list
状态。注意:您当前正在通过将嵌套对象的
isMounted
属性设置为false
来改变原始状态。即使您复制了数组,您也应该复制正在更新的对象,以避免重新渲染问题。以下是有关如何访问状态的最新值并避免状态突变的一些修改:
参见下面的示例: