TypeError dispatcher.useState не является функцией при использовании React Hooks
У меня есть этот компонент:
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-хуков, установив [email protected]
в моем package.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 | });
Что я сделал не так?
Ответы
Ответ 1
Причин может быть много, и большинство из них из-за несовместимости версий или использования ^
в package.json
:
- Убедитесь, что вы также обновили пакет
react-dom
и он имеет ту же версию, что и react
. В целом, react
и react-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",
...
}
}
- Если вы используете шутя, убедитесь, что
react-test-renderer
имеет ту же версию, как react
и react-dom
:
Пример package.json
:
{
...
"dependencies": {
"react": "16.8.4",
"react-dom": "16.8.4",
"react-test-renderer": "16.8.4",
...
}
}
Ответ 2
Вы можете получить ту же ошибку при использовании шутки. Поэтому, чтобы исправить ошибку, мне пришлось обновить реагировать на тестирование, чтобы иметь ту же версию, что и реагировать и реагировать
yarn add -D [email protected]
Или же
npm i [email protected]
Все реагировать, реагировать-дом и реагировать-тест-рендерер должен содержать одну и ту же версию
"react": "^16.7.0-alpha.0",
"react-dom": "^16.7.0-alpha.0",
"react-test-renderer": "^16.7.0-alpha.0"
Ответ 3
Теперь, когда реакция 16.7 (та, которая не содержит хуков) выпущена, вы можете получить ошибку, если ^16.7.0-alpha.0
с ведущим ^
в вашем package.json
.
Для версии с хуками вы должны опустить ^
.
Ответ 4
Я только что обновил до последней версии реагировать и реагировать DOM, это работает для меня. Проверьте версии React здесь
Ответ 5
React.useState(0)
мой, вызвав React.useState(0)
.
Если реагирующая версия достаточно новая, ей просто нужно использовать React.useState
.