12

I am trying to implement hooks into a React (^16.6.0) application using TypeScript

import * as React, {useState}  from 'react';

Any idea what is the right syntax for this import?

3 Answers 3

14

import supports a limited set of syntax variations.

It can be:

import React, {useState}  from 'react';

The downside is that entire library is imported, because React is default export and cannot be tree-shaken. Since the presence of React import is needed to use JSX syntax, a more efficient way is:

import * as React from 'react';
import {useState}  from 'react';

Hooks were introduced in pre-release React 16.7. react version constraint should be ^16.7.0-alpha.0, @types/react should be ^16.7.0.

Sign up to request clarification or add additional context in comments.

2 Comments

Sorry still not working it gives me the following 'Module '"C:/web-client-ts/node_modules/@types/react/index"' has no exported member 'useState'.'
It should be because of the version in "@types/react" is not yet updated. Please npm i @types/react@latest and try again
13

I had the same error on "@types/react": "^16.8.17". Looking at it's type def file, it was missing the useState function for some reason, though it was mentioned in the comments of other hooks like useReducer.

Upgrading to "@types/react": "^16.8.18" with npm i @types/react@latest fixed it.

2 Comments

still giving the error
Also bugged in the 17.x.x branch. 17.0.27 bugged, 17.0.44 fixed.
5

Restarting Ts Server Helped in my case enter image description here

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.