【问题标题】:React Hook "React.useEffect" is called in function "selectmenu" which is neither a React function component or a custom React Hook functionReact Hook "React.useEffect" 在函数 "selectmenu" 中被调用,它既不是 React 函数组件也不是自定义 React Hook 函数
【发布时间】:2020-11-02 01:42:09
【问题描述】:

问题:React Hook "React.useEffect" 在函数 "selectmenu" 中被调用,该函数既不是 React 函数组件也不是自定义 React Hook 函数。

目标:我只想在单击按钮时安装 Component('component DidMount/WillUnmount) (使用 useEffect()),而不是在加载文件(或整个组件)时安装。

实际目标:我想在点击时选择(或突出显示)一个文件(自定义)。但是当用户在文件尺寸之外点击(),那么选定的文件应该被取消选择(删除突出显示)。

export default function Academics() {
  let [ ismenuselected, setmenuselection] = useState(0)

  const selectmenu = () => {

    console.log("Menu to Select")

    React.useEffect(() => {
      console.log('Component DidMount/WillUnmount')

      return () => {
         console.log('Component Unmounted')
      }
    }, [isfolderselected]);
  }

  return (
          <div onClick={selectmenu}></div>
  )
}

注意:

  1. 我尝试过使用大写的 SelectFolder #56462812Error: Invalid hook call. Hooks can only be called inside of the body of a function component.
  2. 我想试试this 之类的东西。但是点击一个按钮(useEffect() 应该调用 onClick 事件)。

【问题讨论】:

  • 你不能在回调中加入钩子。这在反应文档中的钩子常见问题的官方规则中有所涵盖。您需要切换一些状态,然后在无条件调用的效果挂钩中检查该状态。
  • 感谢@JaredSmith。我通过使用Class ComponentCompounentDidMount 使其工作

标签: javascript reactjs react-native react-hooks onclicklistener


【解决方案1】:

我想我得到了你想要完成的任务。首先,您不能在函数内定义挂钩。您可以做的是在至少一个依赖项发生变化后触发效果回调。

useEffect(() => {
  // run code whenever deps change
}, [deps])

虽然对于这个特殊问题(根据我从你的描述中了解到的),我会这样做:

export default function Academics() {
  let [currentOption, setCurrentOption] = useState()

  function handleSelectOption(i) {
    return () => setCurrentOption(i)
  }

  function clearSelectedOption() {
    return setCurrentOption()
  }

  return (options.map((option, i) =>
    <button
      onClick={handleSelectOption(i)}
      className={i === currentOption ? 'option option--highlight' : 'option'}
      onBlur={clearSelectedOption}
    ></button>
  ))
}

【讨论】:

  • 感谢@nicodp,这在一定程度上确实有所帮助。
猜你喜欢
  • 2020-03-18
  • 2019-09-14
  • 2022-01-12
  • 1970-01-01
  • 2020-07-04
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多