【问题标题】:React Native AsyncStorage for iOS switch state not persisting用于 iOS 开关状态的 React Native AsyncStorage 不持久
【发布时间】:2021-04-21 14:06:04
【问题描述】:

我正在尝试通过使用 AsyncStorage 存储布尔值来保持开关按钮状态,但它不起作用。每当我离开该屏幕或关闭应用程序并返回该屏幕时,开关的状态都会重置为默认值,而不是从 AsyncStorage 值中读取。

这是我定义的 AsyncFunction:

export async function setPersistedSwitchState(newValue) {
    await AsyncStorage.setItem(
        'switchState',
        JSON.stringify(newValue),
    );
}

export async function getPersistedSwitchState() {
    const switchState = JSON.parse(
        await AsyncStorage.getItem('switchState'),
    );
    return switchState;
}

这是我在切换开关屏幕上的代码:

export function switchButtonScreen() {
    let currentState = false;
    const [toggleState, setToggleState] = useState(
        currentState
    );

    useEffect(() => {
        const getSwitchState = async () => {
          try {
            const value = await getPersistedSwitchState()
            return value != null ? value : false;
          } catch(e) {
            console.log(e);
          }
        };
        currentState = fetchPersistedSwitchState();
    }, [toggleState]);


    const toggleSwitch = async () => {
        setToggleState(!toggleState);
        if (!toggleState) {
            await setPersistedSwitchState(true);
        } else await setPersistedSwitchState(false);
    };

    return (

                    <SwitchButton
                        enabled={toggleState}
                        onChange={toggleSwitch}
                    />

    );
}

...

任何帮助将不胜感激。提前谢谢你。

【问题讨论】:

  • 尝试在useEffect调用的底部添加setToggleState(currentState)

标签: reactjs react-native use-effect asyncstorage persistent-storage


【解决方案1】:

正如评论中的@emkarachchi 所指出的,您需要在useEffect 通话结束时给我们setToggleState(currentState)。 该州仅在首次加载屏幕时使用currentState

对于setPersistedSwitchState,最好直接使用你的togglestate 变量,所以你不需要ifs,所以setPersistedSwitchState(!toggleState)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多