React.js 钩住了奇怪的行为

时间:2021-05-27 15:37:20

标签: javascript reactjs react-hooks

出于某种原因,默认值总是显示出来,而最后输入的值却没有显示出来。

APP.JS

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

function App() {

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

  const handleUserAdd = (user1) => {
      setUser(prevState => ([
        ...prevState, 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(0);
    const handleOnNameChange = (e) => {
        setName(e.target.value);
    }
    const handleOnAgeChange = (e) => {
        setYears(e.target.value);
    }
    const handleOnSubmit = (e) =>{
        e.preventDefault();
        //if(years !== 0){
            const user = {
                username: name,
                age: years
            };
            props.onUserAdd(user);
        //}
        setName("");
        setYears(0);
    }
    return ( 
        <>
            <form onSubmit={handleOnSubmit}>
                <div className="mb-3">
                    <label htmlFor="exampleInputEmail1" className="form-label">Username:</label>
                    <input className="form-control" aria-describedby="emailHelp" value={name} onChange={handleOnNameChange} />
                </div>
                <div className="mb-3">
                    <label htmlFor="exampleInputPassword1" className="form-label">Age:</label>
                    <input type="number" min={1} max={120} className="form-control" value={years} onChange={handleOnAgeChange} />
                </div>
                <button type="submit" className="btn btn-primary">Add User</button>
            </form>
        </>
    );
}
 
export default User;

显示的内容: enter image description here

它显示 Alex 11,这是默认值,如果我将其设置为空,它将显示为空项目。 在输入上,我输入了 3 个值:值 1、1;值 2,2;值 3,3。值 3,3 未显示,如果我输入 Value4,4,则值 3 将显示,而值 4,4 不会显示。我不明白为什么它用默认值填充第一个值而不是将其更改为 Value1,1。为什么不显示最后一个?

如果您能帮助我,我将不胜感激。

0 个答案:

没有答案