【问题标题】:useState is not a function inside useEffectuseState 不是 useEffect 中的函数
【发布时间】:2021-02-16 14:01:30
【问题描述】:

我是原生反应的新手。我正在尝试使用状态和效果挂钩。

const {isKeyboardOpen, setIsKeyboardOpen} = useState(false)

useEffect(() => {
    const keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', () => setIsKeyboardOpen(true))
    const keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', () => setIsKeyboardOpen(false))

    return () => {
        keyboardDidShowListener.remove()
        keyboardDidHideListener.remove()
    }
}, [])

但是会报错

setIsKeyboardOpen 不是函数。

我不允许在效果钩子中使用状态钩子吗?

【问题讨论】:

  • 尝试重建您的应用,有时重建会有所帮助。
  • 您的州有大括号 ({ }),useState 用方括号声明。将其更改为[isKeyboardOpen, setIsKeyboardOpen] = ...
  • 我已经挣扎了将近一天,只是为了发现它是方括号。哈哈哈。谢谢@康斯坦丁

标签: react-native react-hooks


【解决方案1】:

您好,我在代码中使用了它,但没有出现任何错误。请检查您的代码-

import React, {useState, useEffect} from 'react';
import {Platform, Switch, Keyboard} from 'react-native';
import PropTypes from 'prop-types';

const SwitchComponent = (props) => {
 const [isEnabled, setIsEnabled] = useState(false);

  useEffect(() => {
    const keyboardDidShowListener = Keyboard.addListener(
      'keyboardDidShow',
      () => setIsEnabled(true),
    );
    const keyboardDidHideListener = Keyboard.addListener(
      'keyboardDidHide',
      () => setIsEnabled(false),
    );

return () => {
  keyboardDidShowListener.remove();
  keyboardDidHideListener.remove();
 };
}, []);

return (
<Switch/>
 );
};

export default SwitchComponent;![enter image description here](https://i.stack.imgur.com/6bByT.jpg)

【讨论】:

  • 嗨。感谢您的回复。真奇怪。我看过的所有教程,状态都是在效果挂钩中工作。我刚刚复制并粘贴了我的代码,以确保我们有相同的代码。
猜你喜欢
  • 1970-01-01
  • 2021-04-09
  • 2020-10-16
  • 2021-01-19
  • 2021-09-06
  • 2021-11-12
  • 2021-12-04
  • 2021-04-19
  • 1970-01-01
相关资源
最近更新 更多