#javascript #reactjs #local-storage
#javascript #reactjs #локальное хранилище
Вопрос:
Я пытаюсь реализовать функцию автоматического сохранения с помощью React, и все работает нормально, когда я сохраняю в локальном хранилище, но моя проблема в том, что когда я, например, закрываю окно и пытаюсь извлечь данные, я не хочу получать их из локального хранилища, а вместо этого из функции EditorData. Я не совсем уверен, как подойти к этой проблеме.
const Editor = ({ data, setFieldValue, fieldProps, t }) => {
const editorName = fieldProps.name;
const [editorData, setEditorData] = useState(
element.setData(editorName, data)
);
const storageData = localStorage.getItem(`editorData`);
useEffect(() => {
setFieldValue(
editorName,
element.convertDataToFieldType(editorName, editorData)
);
setInterval(function() {
localStorage.setItem(`editorData`, JSON.stringify(editorData));
}, 20000);
}, [editorData]);
return (
<Pages
editorData={JSON.parse(storageData) || editorData}
setEditorData={setEditorData}
editorName={editorName}
setFieldValue={setFieldValue}
/>
);
};
В компоненте Pages внутри возврата я беру данные локального хранилища, а если нет, то данные редактора.
Комментарии:
1. Я не совсем уверен, что вы пытаетесь сделать. Где находится функция onChange?
2. Я имею в виду из EditorData, в основном, когда я монтирую компонент, я хочу сначала использовать локальное хранилище для извлечения данных из редактора, но затем я хочу использовать EditorData
Ответ №1:
Я не уверен, что правильно понял вашу проблему, но я предлагаю, чтобы вы могли использовать sessionStorage вместо localStorage. Это также позволяет вам сохранять данные в браузере, но если вы закроете вкладку или браузер, эти данные будут удалены. Таким образом, вы можете использовать его, и каждый раз, когда вы хотите получить доступ к своим данным, вы можете просто проверить, есть ли какие-либо данные в вашем sessionStorage, если они есть — просто возьмите их, если нет — используйте свою функцию. Таким образом, если пользователь закроет окно, в следующий раз, когда он его откроет — sessionStorage будет пустым