С обычным 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 можно получить доступ к состоянию из где-нибудь в компоненте, но с крючками кажется, что есть только запутанные пути, каждый с серьезными недостатками, или, может быть, я просто что-то упускаю.
Любое предложение?