javascript - TypeError dispatcher.useState no es una función cuando se utilizan React Hooks
reactjs react-hooks (3)
Ahora que se ha liberado la reacción 16.7 (la que no contiene ganchos) es posible que obtenga un error si escribe ^16.7.0-alpha.0 con la ^ principal en su package.json .
Para la versión con ganchos hay que omitir el ^ .
Tengo este componente:
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;
Como quiero probar la nueva propuesta de ganchos React instalando [email protected] en mi package.json , pero recibo un error:
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 | });
¿Qué hice mal?
Puede haber muchas razones, y la mayoría se deben a incompatibilidades de versión:
- Asegúrese de que también haya actualizado el paquete
react-domy que tenga la misma versión quereact. En general,reactyreact-domdebe ser siempre la misma versión enpackage.jsonya que el equipo de React los actualiza juntos.
Ejemplo package.json :
{
...
"dependencies": {
"react": "^16.7.0-alpha.0",
"react-dom": "^16.7.0-alpha.0", // Make sure version is the same as react
...
}
}
- Si está utilizando Jest, asegúrese de que
react-test-renderersea de la misma versión quereactyreact-dom:
Ejemplo package.json :
{
...
"dependencies": {
"react": "^16.7.0-alpha.0",
"react-dom": "^16.7.0-alpha.0",
"react-test-renderer": "^16.7.0-alpha.0",
...
}
}
Puede obtener el mismo error al usar broma. Así que para corregir el error tuve que actualizar react-test-renderer para tener la misma versión que reaccionar y reaccionar-dom
yarn add -D react-test-renderer@next
O
npm i react-test-renderer@next
Todos reaccionan, react-dom y react-test-renderer deben contener la misma versión
"react": "^16.7.0-alpha.0",
"react-dom": "^16.7.0-alpha.0",
"react-test-renderer": "^16.7.0-alpha.0"