【问题标题】:React Hooks issues in React 16.7 TypeError: Object(...) is not a functionReact 16.7 TypeError 中的 React Hooks 问题:Object(...) is not a function
【发布时间】:2018-12-20 02:22:29
【问题描述】:

我正在运行最新版本的 React,我收到了这个错误 我有一个使用 React Hooks 的简单组件,你可以在这里看到:

import React, { useState } from "react";

const AppFunction = () => {
  const [count, setCount] = useState(0);

  const incrementCount = () => {
    setCount(count + 1);
  };
  return (
    <div>
      <h1>Count:{count} </h1>
      <button onClick={incrementCount}>Click Me</button>
    </div>
  );
};

export default AppFunction;

我在堆栈溢出中发现的所有内容都说要升级库,但我有最新版本 (16.7.0) 并且尝试了 alpha 版本但没有运气,我做错了什么?

package.json

"dependencies": {
    "react": "^16.7.0",
    "react-dom": "^16.7.0",
    "react-scripts": "2.1.1"
  },

【问题讨论】:

  • 该错误的确切说法是什么?
  • 我编辑了错误的屏幕截图
  • 我不确定该行会触发这样的错误:-S
  • 我 console.log useState 并且它出现未定义,所以它没有被正确导入或其他东西
  • 你确定你在运行 react v16.7 吗?

标签: reactjs react-hooks


【解决方案1】:

更新

Hooks 现在作为 React v16.8.0 的一部分发布。你可以通过升级你的反应版本来使用钩子

有关 API 的更多详细信息,请参阅 docs


React 16.7.0 不包含钩子。

根据React blog

我们的最新版本包括一个重要的性能错误修复 React.lazy。尽管没有 API 更改,但我们将其作为 次要而不是补丁。

要在您的代码中运行挂钩,请参阅How to use new Feature Hooks in React?

【讨论】:

  • 谢谢我之前试过 alpha 版本,但它是 alpha.0,现在 alpha.2 可以工作
【解决方案2】:

我尝试在 package.json 中使用以下内容但不起作用。

"react": "16.7.0-alpha.2",
"react-dom": "16.7.0-alpha.2",

以下是有效的

"react": "next",
"react-dom": "next",

编辑

React 版本 v16.8.0 里面有 Hooks。使用它。

【讨论】:

    【解决方案3】:

    编辑 package.json

    "react": "16.7.0-alpha.2",
    "react-dom": "16.7.0-alpha.2",
    "react-router-dom": "4.4.0-beta.6",
    

    然后运行yarn

    react 发布了 16.7.0,但是没有 react 钩子。如果你使用'^react@16.7.0-alpha.2',删除yarn.lock,它会安装react@16.7.0。所以你必须删除'^'并使用'react@16.7.0-alpha.2'。

    【讨论】: