在 React 中分配本地存储值

Assign local storage value in React

我在单个网页上实现了一个切换按钮,使用户能够 select 在两种语言(英语和法语)之间切换 - 我正在尝试使用 React 和 i18next 库。到目前为止,切换按钮可以完成工作,但我想将用户首选项保存在本地存储中,直到现在我还没有成功完成该任务。

正如您在下面的代码中注意到的那样,我做了一些测试,将开关按钮 (checked: false) 的初始状态替换为:checked: (lngSelect ? lngSelect : false)

但不幸的是,这不起作用。我也不知道我的代码是否足够干净,我的意思是这是否是执行此类操作的常用方法。

import React, { useState } from 'react';
import Switch from '@material-ui/core/Switch';
import { useTranslation } from 'react-i18next';
import footerStyles from '../../styles/footer.module.scss';

function SwitchBtn() {

    const lngSelect = localStorage.getItem('LngSelect');

    const { i18n } = useTranslation();
    const [state, setState] = useState({
        checked: (lngSelect ? lngSelect : false)
        // checked: false
    });

    function handleTranslation(state) {
        if (state) {
            i18n.changeLanguage('fr');
        } else {
            i18n.changeLanguage('en');
        }
        localStorage.setItem('LngSelect', JSON.stringify(state));
    }

    return (
        <Switch
            className={footerStyles.switchBtn}
            checked={state.checked}
            onChange={(e) => {
                setState({ checked: e.target.checked });
                handleTranslation(e.target.checked);
            }}
            name="languagesSwitch"
        />
    )
}

export default SwitchBtn

您似乎正在将整个字符串化的 state 对象存储到本地存储中。在这种情况下,您需要使用 JSON.parse() 将 JSON 字符串解析为有效的 JavaScript 对象,然后再为 useState 挂钩分配初始值。

const lngSelect = JSON.parse(localStorage.getItem('LngSelect'));
const [state, setState] = useState({
  checked: lngSelect.checked,
});