Приложение, которое я создаю, имеет настраиваемые параметры. Я хотел бы загрузить настройки по умолчанию, тогда, когда пользователь вносит какие-либо изменения, пользовательские настройки будут сохранены в localStorage. Теперь, когда пользователь вернется в следующий раз, мы загрузим настройку из его localStorage.
Я использую контекст React, например, так ...
const SettingsContextProvider = (props: any) => {
const [settings, setSettings] = useState(getSettings());
useEffect(() => {
localStorage.setItem('settings', JSON.stringify(settings))
}, [settings]);
return (...some jsx...);
}
Затем getSettings (). ..
getSettings() {
// get from local storage
if (process.browser) {
const localSettings = localStorage.getItem('settings');
if (localSettings) return JSON.parse(localSettings );
}
// fall back to default settings
return "Something else";
}
У меня проблема в том, что на стороне сервера (на стороне узла) у нас нет локального хранилища (поэтому я проверяю на process.browser
), поэтому он возвращается к настройкам по умолчанию. Затем, когда он попадает в браузер, он, кажется, снова вызывает getSettings()
, и в этом случае у нас действительно есть локальное хранилище, и оно загружается оттуда.
Это работает, , но затем я получаю ошибку :
Text content did not match. Server: "Something else" Client: "Something custom"
Итак, я понимаю, что сервер не соответствует клиенту, и он расстроен из-за этого. Я понимаю, ПОЧЕМУ это происходит, но у меня НЕТ ИДЕИ, как это исправить. Может быть, мне нужно внедрить редукторы или использовать куки?
Кто-нибудь сталкивался с этим?
Я более чем рад поделиться своим полным кодом репо, если это поможет.