【问题标题】:React Use State Hook error TypeError: setUser is not a functionReact Use State Hook error TypeError: setUser is not a function
【发布时间】:2021-05-27 13:54:59
【问题描述】:

当我按下提交按钮时,我收到此错误,TypeError: setUser is not a function。我正在尝试从表单中获取数据并将其存储。

APP.JS

import React, { useState } from 'react';
import User from './Components/User';
import Card from './Components/Card';

function App() {

  const {user, setUser} = useState([{username: "", age: 1}]);

  const handleUserAdd = (user1) => {
    setUser(user1);

    console.log(user);
  }

  return (
    <div className="App">
      <Card>
         <User onUserAdd={handleUserAdd}/>
      </Card>
    </div>
  );
}

export default App;

USER.JS

import React, { useState } from 'react';

const User = (props) => {

    const {name, setName} = useState("");
    const {years, setYears} = useState(1);

    const handleOnNameChange = (e) => {
        setName(e.target.value);
    }

    const handleOnAgeChange = (e) => {
        setYears(e.target.value);
    }

    const handleOnSubmit = (e) =>{
        e.preventDefault();

        const user = {
            username: name,
            age: years
        };

        props.onUserAdd(user);

        setName("");
        setYears();
    }

    return ( 
        <>
            <form onSubmit={handleOnSubmit}>
                <div class="mb-3">
                    <label for="exampleInputEmail1" class="form-label">Username:</label>
                    <input class="form-control" aria-describedby="emailHelp" value={name} onChange={handleOnNameChange} />
                </div>
                <div class="mb-3">
                    <label for="exampleInputPassword1" class="form-label">Age:</label>
                    <input type="number" min={1} max={120} class="form-control" value={years} onChange={handleOnAgeChange} />
                </div>
                <button type="submit" class="btn btn-primary">Add User</button>
            </form>
        </>
    );
}
 
export default User;

错误截图

当我在输入框中输入时也会发生这种情况:

我之前使用过 useState 钩子,但从未发生过,如果您能帮我解决这个问题,我将不胜感激!

【问题讨论】:

  • 检查useState 的语法。它返回一个数组,而不是一个对象。 const {user, setUser} = useState([{username: "", age: 1}]); 应该是 const [user, setUser] = useState([{username: "", age: 1}]);。其他人也一样。

标签: javascript reactjs react-hooks


【解决方案1】:

useState 返回一个数组而不是一个对象。你应该像这样解构它;

const [user, setUser] = useState([{username: "", age: 1}]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-11
    • 2018-12-13
    • 2018-05-09
    • 2017-08-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 2015-04-20
    相关资源
    最近更新 更多