TypeError dispatcher.useState 不是使用 React Hooks 时的函数

IT技术 javascript reactjs react-hooks
2021-04-16 14:25:59

我有这个组件:

import React, { useState, useEffect } from "react";
import ReactDOM from "react-dom";

function App() {
  const [count, setCount] = useState(0);
  useEffect(() => {
    document.title = `You clicked ${count} times`;
  });

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  );
}

export default App;

因为我想尝试新的阵营钩通过安装建议react@16.8.1package.json,但我得到一个错误:

TypeError: dispatcher.useState is not a function

  2 | import ReactDOM from "react-dom";
  3 | 
  4 | function App() {
> 5 |   const [count, setCount] = useState(0);
    |                                     ^
  6 |   useEffect(() => {
  7 |     document.title = `You clicked ${count} times`;
  8 |   });

我做错了什么?

6个回答

可能有很多原因,大多数是由于版本不兼容或使用了^in package.json

1. 确保reactreact-dom版本相同

确保您还更新了react-dom软件包,并且它react. 一般来说reactreact-dom应该始终package.json与 React 团队一起更新它们的版本相同

如果您想安装 React 16.7.0-alpha.2,请检查您没有使用 ,^因为您将安装 16.7,它没有挂钩。

示例package.json

{
  ...
  "dependencies": {
    "react": "16.8.4", // Make sure version is same as react-dom
    "react-dom": "16.8.4",
    ...
  }
}

2.react-test-rendererreact版本相同react-dom

如果您使用的是 Jest,请确保其react-test-renderer版本与react相同react-dom

示例package.json

{
  ...
  "dependencies": {
    "react": "16.8.4",
    "react-dom": "16.8.4",
    "react-test-renderer": "16.8.4",
    ...
  }
}
谢谢你。我已经添加"^"了反应版本。删除它可以解决这个问题。
2021-05-31 14:25:59
+1Also check that you are not using the ^ as you will install 16.7 instead, which doesn't have hooks.非常感谢,谢谢。
2021-06-06 14:25:59
2021-06-11 14:25:59
不,仍然没有奏效!你能告诉我们你做了同样的事情并且对你有用的小提琴手吗?
2021-06-11 14:25:59
即使使用 16.8.1 和 NPM 强制安装,我也得到了这个。
2021-06-18 14:25:59

使用 jest 时可能会遇到相同的错误。因此,为了修复错误,我必须更新 react-test-renderer 以使其具有与 react 和 react-dom 相同的版本

yarn add -D react-test-renderer@next

或者

npm i react-test-renderer@next

所有 react、react-dom 和 react-test-renderer 都应该包含相同的版本

"react": "^16.7.0-alpha.0",
"react-dom": "^16.7.0-alpha.0",
"react-test-renderer": "^16.7.0-alpha.0"

通过调用修复了我的React.useState(0)

如果react版本足够新,它只需要使用React.useState.

谢谢你!由于您的回答,我重新检查了我调用 { useEffect, useState } 的行。很奇怪,但是module“react”已更新为“react-redux”。
2021-05-29 14:25:59

现在,react16.7(一个包含钩)被释放,如果你键入你可能会得到一个错误,^16.7.0-alpha.0与领先的^在你的package.json

对于带有钩子的版本,您必须省略^.

我刚刚更新到最新版本的 react 和 react DOM,它对我有用。 在此处检查 React 版本