I have this component:
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;
as I want to try out the new React hooks proposal by installing [email protected]
in my package.json
, but I'm getting an 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 | });
What did I do wrong?
The "Uncaught ReferenceError: useState is not defined" occurs when we use the useState hook in our code but forget to import it. To solve the error, import the hook before using it - import {useState} from 'react' . Copied!
In conclusion, we have learned how to create a custom hook by using one of React's built-in Hooks called useState. This custom hooks is not complex, however, it should show you how you can either reduce complexity and redundancy in your React project.
A Hook is a special function that lets you “hook into” React features. For example, useState is a Hook that lets you add React state to function components.
We initialize our state by calling useState in our function component. useState accepts an initial state and returns two values: The current state. A function that updates the state.
There could be many reasons, and most are due to version incompatibilites or using a ^
in package.json
:
react
and react-dom
are of the same versionEnsure that you have also updated the react-dom
package and it is of the same version as react
. In general react
and react-dom
should always be the same version in package.json
as the React team updates them together.
If you want to install React 16.7.0-alpha.2
, check that you are not using the ^
as you will install 16.7 instead, which doesn't have hooks.
Example package.json
:
{ ... "dependencies": { "react": "16.8.4", // Make sure version is same as react-dom "react-dom": "16.8.4", ... } }
react-test-renderer
is of the same version as react
and react-dom
If you are using Jest, ensure that react-test-renderer
is of the same version as react
and react-dom
:
Example package.json
:
{ ... "dependencies": { "react": "16.8.4", "react-dom": "16.8.4", "react-test-renderer": "16.8.4", ... } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With