由状态反应原生引起的无尽循环

问题描述 投票:0回答:1

我试图根据键盘是否打开来显示一个组件。我很难理解为什么我最终会出现一个无休止的循环。这是我的代码。

    const [isKeyboardOpen, setIsKeyboardOpen] = useState(true);

    useEffect(() => {
        Keyboard.addListener("keyboardDidShow", _keyboardDidShow);
        Keyboard.addListener("keyboardDidHide", _keyboardDidHide);

        // cleanup function
        return () => {
            console.log('cleanup')
            Keyboard.removeListener("keyboardDidShow", _keyboardDidShow);
            Keyboard.removeListener("keyboardDidHide", _keyboardDidHide);
        };
    }, []);


    const _keyboardDidShow = () => {
        console.log('opened')
        setIsKeyboardOpen(true);
    };

    const _keyboardDidHide = () => {
        console.log('closed')
        setIsKeyboardOpen(false);

    };

请帮助我

javascript reactjs react-native react-hooks react-native-ios
1个回答
0
投票

我希望这能解决你的问题

const [isKeyboardOpen, setIsKeyboardOpen] = useState(true);

useEffect(() => {
    Keyboard.addListener("keyboardDidShow", () =>_keyboardDidShow());
    Keyboard.addListener("keyboardDidHide", () =>_keyboardDidHide());

    // cleanup function
    return () => {
        console.log('cleanup')
        Keyboard.removeListener("keyboardDidShow",() => _keyboardDidShow());
        Keyboard.removeListener("keyboardDidHide", () =>_keyboardDidHide());
    };
}, []);


const _keyboardDidShow = () => {
    console.log('opened')
    setIsKeyboardOpen(true);
};

const _keyboardDidHide = () => {
    console.log('closed')
    setIsKeyboardOpen(false);

};
© www.soinside.com 2019 - 2024. All rights reserved.