我有这个组件:
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;
因为我想通过在我的package.json
中安装react@16.8.1
来尝试新的React hooks提案,但我得到了一个错误:
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 | });
我做错了什么?
9条答案
按热度按时间ippsafx71#
可能有很多原因,大多数是由于版本不兼容或在
package.json
中使用^
:1.确保
react
和react-dom
版本相同确保您也更新了
react-dom
包,并且它**与react
**的版本相同。通常情况下,react
和react-dom
在package.json
中应该始终是相同的版本,因为React团队会一起更新它们。**如果你想安装React
16.7.0-alpha.2
,请检查你没有使用^
,因为你将安装16.7,它没有hooks。示例
package.json
:2.
react-test-renderer
与react
、react-dom
版本相同如果您使用Jest,请确保
react-test-renderer
与react
和react-dom
的版本相同:示例
package.json
:de90aj5v2#
使用jest时可能会出现同样的错误,所以为了修复这个错误,我必须更新react-test-renderer,使其与react和react-dom的版本相同
或者
所有react、react-dom和react-test-renderer都应该包含相同的版本
rxztt3cl3#
通过调用
React.useState(0)
修复了我的问题。如果react版本足够新,它只需要使用
React.useState
。nhjlsmyf4#
现在react 16.7(不包含钩子的版本)已经发布了,如果你在
package.json
中输入^16.7.0-alpha.0
,前面是^
,你可能会得到一个错误。对于有钩子的版本,你必须省略
^
。mv1qrgav5#
确保你正在正确地使用钩子。当你使用错误但错误描述不够时,它也对我有效。
prdp8dxp6#
我刚刚更新到最新版本的react和react DOM,它对我很有效。Check React versions here
vuktfyat7#
同样的错误发生在我身上。
我的错误是:我使用了:
您应该用途:
9q78igpj8#
如果yangshun-tay不能满足你情况,而你正在使用子模块或子模块,只需要使用
npm dedupe
这个命令将查找现有的package.json
从你的父到子到leap子,合并所有重复的模块,并将其放入根node_modules
与你的父package.json
相同级别的目录。下面是npm-dedupe的参考
9lowa7mx9#
使用React和
{useState}
: