使用常规的 React 可能会有这样的事情:
class NoteEditor extends React.PureComponent {
constructor() {
super();
this.state = {
noteId: 123,
};
}
componentWillUnmount() {
logger('This note has been closed: ' + this.state.noteId);
}
// ... more code to load and save note
}
在 React Hooks 中,可以这样写:
function NoteEditor {
const [noteId, setNoteId] = useState(123);
useEffect(() => {
return () => {
logger('This note has been closed: ' + noteId); // bug!!
}
}, [])
return '...';
}
返回的内容useEffect
将在组件卸载之前只执行一次,但是状态(如上面的代码中所示)将是陈旧的。
一种解决方案是noteId
作为依赖项传递,但是效果将在每次渲染上运行,而不仅仅是一次。或者使用引用,但这很难维护。
那么是否有任何推荐的模式可以使用 React Hook 来实现这一点?
使用常规 React,可以从组件的任何位置访问状态,但是使用钩子似乎只有复杂的方式,每种方式都有严重的缺点,或者我可能只是遗漏了一些东西。
有什么建议吗?