如何重新渲染组件
function Bookmarks({ data }: any) {
const bookmarkedBlogs = useBookmarks().getBookmarkedBlogs(data.allMdx.nodes);
.....
}
当书签在钩子中发生变化时
function useBookmarks() {
const [bookmarks, setBookmarks, accessDenied] = useLocalStorage<BlogType['id'][]>('bookmarks', []);
const getBookmarkedBlogs = (blogs: BlogType[]) => {
return blogs.filter(checkIsBookmarked)
};
因为到目前为止,即使我切换书签,getBookmarkedBlogs 函数也不会执行,除非在组件的初始渲染中。
答案 0 :(得分:0)
useLocalStorage
的实现方式,以及如何切换书签?
答案 1 :(得分:0)
你的钩子实际上不起作用。
似乎您想要一个钩子来订阅来自 React 渲染树之外的某个源的更新。
这是一个简单的例子:
function MyComp() {
let eventValue = useEventListener()
return (
<div>
{eventValue}
</div>
)
}
function useEventListener() {
let [ value, setValue ] = React.useState(1)
React.useEffect(() => {
setTimeout(() => setValue(5), 1000)
}, [])
return value
}
它起作用的原因是当数据应该更改时,自定义钩子会调用内置钩子。 React Hooks 框架处理剩下的事情。
您可以订阅事件流,或侦听 IPC 消息或其他内容,而不是 setTimeout
。但是:
useEffect
处理