невозможно использовать useState с машинописным текстом (не удается найти имя 'useState') - PullRequest
0 голосов
/ 19 марта 2020

В чем проблема с кодом ниже? Я получил предупреждение по машинописи при использовании useState

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

const useForm = (callback: any | undefined) => {
  const [inputs, setInputs] = useState({}) //error: Cannot find name 'useState'.ts(2304)


  const handleInputChange = event => {
    event.persist()
    setInputs(inputs => ({
      ...inputs,
      [event.target.name]: event.target.value,
    }))
  }

  return {
    handleInputChange,
    inputs,
  }
}

export default useForm

https://codesandbox.io/s/react-typescript-starter-lmub8

Ответы [ 3 ]

2 голосов
/ 19 марта 2020

Ваш оператор импорта недопустим.

Вы можете импортировать все как React, например:

import * as React from 'react';

и доступ useState из объекта React:

 const [inputs, setInputs] = React.useState({})

или импортируйте React по умолчанию и только частично импортируйте другие имена:

import React, { useState } from 'react'

И используйте useState как раньше:

const [inputs, setInputs] = useState({});
0 голосов
/ 19 марта 2020

вы можете сначала использовать React.useState или импортировать его как отдельный экспорт. во-вторых, вы должны также указать объект события, такой как событие изменения или событие формы.

import * as React from 'react'
import {useState} from 'react';
const useForm = (callback: () => void) => {
  const [inputs, setInputs] = useState({});


  const handleInputChange = (event:React.ChangeEvent<HTMLInputElement>) => {
    event.persist()
    setInputs(inputs => ({
      ...inputs,
      [event.target.name]: event.target.value,
    }))
  }

  return {
    handleInputChange,
    inputs,
  }
}

export default useForm
0 голосов
/ 19 марта 2020

Попробуйте это в formHook.tsx

import React, { useState } from 'react';

и это в app.tsx

import React, { Component } from 'react'
const { inputs, handleInputChange } = useForm;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...