У меня есть следующий компонент (упрощенный), который, учитывая идентификатор заметки, будет загружать и отображать его. Он загружает заметку в useEffect
и, когда загружается другая заметка или когда компонент отключается, сохраняет заметку.
const NoteViewer = (props) => {
const [note, setNote] = useState({ title: '', hasChanged: false });
useEffect(() => {
const note = loadNote(props.noteId);
setNote(note);
return () => {
if (note.hasChanged) saveNote(note); // bug!!
}
}, [props.noteId]);
const onNoteChange = (event) => {
setNote({ ...note, title: event.target.value, hasChanged: true });
}
return (
<input value={note.title} onChange={onNoteChange}/>
);
}
Проблема заключается в том, что в useEffect
, который я использую note
, который не является частью зависимостей, так что это означает, что я всегда получаю устаревшие данные.
Однако, если я добавлю примечание в зависимости, тогда код загрузки и сохранения будет выполняться всякий раз, когда примечание модифицируется, это не то, что мне нужно.
Поэтому мне интересно, как я могу получить доступ к текущей заметке, не делая ее зависимой? Я пытался заменить заметку на ссылку, но это означает, что компонент больше не обновляется при изменении заметки, и я бы предпочел не использовать ссылки.
Любая идея, что будет лучшим способом достичь этого? Может быть, какая-то особая модель React Hooks?