我是React的新手,我试图使用useState制作一个表单。我得到一个错误。"TypeError: setValues不是函数handleInputChange"

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我是React的新手,我试图使用useState制作一个表单。我得到一个错误。"TypeError: setValues不是函数handleInputChange"相关的知识,希望对你有一定的参考价值。

import React, {useState} from "react"
import {Grid, TextField} from "@material-ui/core"

const initialFieldValues = {
    sName: ''
}

const StudentForm = (props) => {
    const {values, setValues} = useState(initialFieldValues)

    const handleInputChange = e => {
        const {name,value} = e.target
        setValues({
            ...values,
            [name]: value

        })
    }

    return (
        <form autoComplete = "off" noValidate>
            <Grid container>
                <Grid item={6}>
                    <TextField
                        name = "sName"
                        variant = "outlined"
                        label = "Full Name"
                        value = {values.sName}
                        onChange = {handleInputChange}
                    />
                </Grid>

            </Grid>
        </form>
    )
}

export default StudentForm
答案

你必须在useState()中使用方括号。

const [values, setValues] = useState(initialFieldValues);
另一答案

你使用了错误的括号。请改成方括号。

const [values, setValues] = useState(initialFieldValues)
另一答案

React api useState 钩子将返回一个 array 你可以拆解它的 valuesetValue 这样的功能。

import React, {useState} from "react"
import {Grid, TextField} from "@material-ui/core"

const initialFieldValues = {
    sName: ''
}

const StudentForm = (props) => {
    const [values, setValues] = useState(initialFieldValues) // change {} to []

    const handleInputChange = e => {
        const {name,value} = e.target
        setValues({
            ...values,
            [name]: value

        })
    }

    return (
        <form autoComplete = "off" noValidate>
            <Grid container>
                <Grid item={6}>
                    <TextField
                        name = "sName"
                        variant = "outlined"
                        label = "Full Name"
                        value = {values.sName}
                        onChange = {handleInputChange}
                    />
                </Grid>

            </Grid>
        </form>
    )
}

export default StudentForm

以上是关于我是React的新手,我试图使用useState制作一个表单。我得到一个错误。"TypeError: setValues不是函数handleInputChange"的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 usestate 和 setstate 而不是 this.setState 使用 react 和 typescript?

使用对象数据类型反应 useState

React.js useState hook 导致过多的重新渲染并且无法更新我的状态

使用 useState 和 useContext React Hooks 持久化 localStorage

在 React 中向 DOM 添加新元素

在 React 中,如何使用 hook useState 来设置数据?