Reactjs 如何在React with typescript中正确使用useState钩子?

Reactjs 如何在React with typescript中正确使用useState钩子?,reactjs,typescript,react-hooks,use-state,Reactjs,Typescript,React Hooks,Use State,我试图在react with typescript中创建一个登录表单。但setEmail方法不接受该值。它表示“string”类型的参数不能分配给“SetStateAction”类型的参数。我该怎么解决它 如果没有任何初始参数,email和setEmail的类型将是未定义的 const [email, setEmail]: [undefined, (value: ((prevState: undefined) => undefined) | undefined) => void] =

我试图在react with typescript中创建一个登录表单。但setEmail方法不接受该值。它表示“string”类型的参数不能分配给“SetStateAction”类型的参数。我该怎么解决它


如果没有任何初始参数,
email
setEmail
的类型将是未定义的

const [email, setEmail]: [undefined, (value: ((prevState: undefined) => undefined) | undefined) => void] = useState();

因此,第一步是通过使用
useState(“”
)或更好的
useState(“”

,使用空字符串初始化useState将解决此问题

useState可以根据您的initialState推断类型,这就是为什么使用空字符串初始化可以解决您的问题

没有initialState的useState将未定义,因此您的类型和状态未定义

const [email, setEmail]: [undefined, (value: ((prevState: undefined) => undefined) | undefined) => void] = useState();
如果希望状态具有更复杂的类型,则需要传递具有已定义类型的initialState:

const initialState: TYPE = {
  // ...
};
const [state, setState] = useState(initialState);


将类型传递给useState,而不将类型设置为initialState,如:
useState(initialState)

您可以为其设置字符串类型

明确方式

const[email,setEmail]=useState(“”)
隐式方式

const[email,setEmail]=useState(“”)
或者如果要设置数字类型

const [email, setEmail] = useState<string>("")
const[inputNumber,setInputNumber]=useState(0);
然后在jsx中这样做

{
//一些方法可以做到这一点
setInputNumber(Number(val.target.value));
setInputNumber(+val.target.value);
setInputNumber(parseInt(val.target.value,0));
}}
/>

在本例中,您只需将generic与
useState
hook一起使用即可

简单案例

const [email, setEmail] = useState<string>("")
  • 使
    useState
    通用
const[email,setEmail]=useState({email:'})

您可以看到

您需要向上面的钩子添加默认字符串值<代码>[email,setEmail]=useState(“”)
另请参见: