私はこのコンポーネントを持っています:
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;
[email protected]
にpackage.json
をインストールして新しい 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 | });
私は何を間違えましたか?
多くの理由が考えられますが、ほとんどはバージョンの非互換性または^
でのpackage.json
の使用が原因です。
react-dom
パッケージも更新したことを確認してください。パッケージはreact
と同じバージョンです。一般に、Reactチームが一緒に更新するとき、react
およびreact-dom
は常にpackage.json
の同じバージョンである必要があります。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",
...
}
}
react-test-renderer
がreact
およびreact-dom
と同じバージョンであることを確認してください。例package.json
:
{
...
"dependencies": {
"react": "16.8.4",
"react-dom": "16.8.4",
"react-test-renderer": "16.8.4",
...
}
}
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"
反応16.7(フックを含むnot)がリリースされたので、^16.7.0-alpha.0
の先頭に^
を付けてpackage.json
と入力すると、エラーが発生する可能性があります。
フック付きのバージョンでは、^
を省略する必要があります。
反応して反応するDOMの最新バージョンに更新しました、それは私のために動作します。 ここでReactバージョンを確認してください
React.useState(0)
を呼び出して修正しました。
反応バージョンが十分に新しい場合は、React.useState
を使用するだけです。