我怎样才能发布员工?

也许我做错了什么?还有别的 Select 吗?我不知道你会有什么react .我只需要一个我的申请前台.这是我路上唯一的问题.

我确实为Employee使用了State,为Department使用了useState,但我不知道如何将Department嵌套在Employee中以用于将来的POST请求.

export default function AddEmployee() {

  // departments

  const [departments, setDepartments] = useState([]);

  useEffect(() => {
    loadDepartments();
  }, []);

  const loadDepartments = async () => {
    const result = await axios.get("http://localhost:8080/api/departments");
    setDepartments(result.data);
  };

  const [dep, setDepartment] = useState({
    id: "",
    title: "",
    description: ""
  });

  const onInputDepartmentChange = (event) => {
    setDepartment({ ...dep, [event.target.name]: event.target.value });
  };

  // employees

  const [employee, setEmployee] = useState({
    name: "",
    surname: "",
    age: "",
    phone: "",
    experience: "",
    department: {
      id: "",
      title: "",
      description: ""
    },
    salary: ""
  });

  const { name, surname, age, phone, experience, department, salary } = employee;

  const onInputChange = (event) => {
    setEmployee({ ...employee, [event.target.name]: event.target.value });
  };

  // all

  let navigate = useNavigate();

  const onSubmit = async (event) => {
    event.preventDefault();
    await axios.post("http://localhost:8080/api/employees", employee);
    navigate("/");
  };


  return (

    <div className='container mb-5'>
      <div className='row'>
        <div className='col-md-6 offset-md-3 border shadow p-4 mt-4'>
          <h2 className='text-center m-4 mb-5'>Add employee</h2>

          <form onSubmit={(event) => onSubmit(event)}>
            <div className="form-floating mb-3">
              <input
                type={"text"}
                className="form-control"
                id="name"
                placeholder="Enter name of employee"
                name='name'
                value={name}
                onChange={(event) => onInputChange(event)} />
              <label htmlFor="name">Name</label>
            </div>

            <div className="form-floating mb-3">
              <input
                type={"text"}
                className="form-control"
                id="surname"
                placeholder="Enter surname of employee"
                name='surname'
                value={surname}
                onChange={(event) => onInputChange(event)} />
              <label htmlFor="surname">Surname</label>
            </div>

            <div className="form-floating mb-3">
              <input
                type={"number"}
                className="form-control"
                id="age"
                placeholder="Enter age of employee"
                name='age'
                value={age}
                onChange={(event) => onInputChange(event)} />
              <label htmlFor="age">Age</label>
            </div>

            <div className="form-floating mb-3">
              <input
                type={"text"}
                className="form-control"
                id="phone"
                placeholder="Enter phone number of employee"
                name='phone'
                value={phone}
                onChange={(event) => onInputChange(event)} />
              <label htmlFor="phone">Phone number</label>
            </div>

            <div className="form-floating mb-3">
              <input
                type={"number"}
                className="form-control"
                id="experience"
                placeholder="Enter experience of employee"
                name='experience'
                value={experience}
                onChange={(event) => onInputChange(event)} />
              <label htmlFor="experience">Experience</label>
            </div>

            <div className="mb-3">
              <select
                className="form-select"
                aria-label="Department"
                name="id"
                onChange={(event) => onInputDepartmentChange(event)}>
                <option defaultValue>Department</option>
                {
                  departments.map((department, index) => (
                    <option key={index} value={department.id}>{department.title}</option>
                  ))
                }
              </select>
            </div>

            <div className="form-floating mb-3">
              <input
                type={"text"}
                className="form-control"
                id="salary"
                placeholder="Enter salary of employee"
                name='salary'
                value={salary}
                onChange={(event) => onInputChange(event)} />
              <label htmlFor="salary">Salary</label>
            </div>

            <button type='submit' className='btn btn-primary'>Submit</button>
            <Link className='btn btn-outline-danger mx-2' to="/">Cancel</Link>
          </form>

        </div>
      </div>
    </div>
  )
}

推荐答案

我看到你的问题,你需要将所有数据存储在一个地方,这样你就可以在POST请求中将其作为一个块发送.

首先,我们不需要这个州. Const[dep,setDepartment]=useState({ ID:"", 标题:"", 描述:"" });

我们可以只使用Employee状态来做我们想做的事情.

const initialState={
    name: "",
    surname: "",
    age: "",
    phone: "",
    experience: "",
    salary: ""
    department: {
        id: "",
        title: "",
        description: ""
        },    
  }

const baseUrl="http://localhost:8080/api"

export default function AddEmployee() {
  const [employee, setEmployee] = useState(initialState);

const { name, surname, age, phone, experience, department, salary } = employee;

   const onInputChange = (event) => {
    setEmployee(prev=>({ ...prev, [event.target.name]:event.target.value}));
  };

 const onInputDepartmentChange = (event) => {
    setEmployee(prev=>({ ...prev, department:{...prev.department,
    [event.target.name]: event.target.value }}));
  };

  const loadDepartments = async () => {
    const result = await axios.get(`${baseUrl}/departments`);
    setDepartments(result.data);
  };

 const onSubmit = async (event) => {
    event.preventDefault();
    await axios.post(`${baseUrl}/employees`, employee);
    navigate("/");
  };

 

UseEffect首选位于返回之前的末尾,而useState首先按此顺序排列组件名称=>;useState=>;Contants=>;Functions=>;API Calles=>;useEffect=>;Return.

useEffect(() => {
    loadDepartments();
  }, []);

请再次询问,如果您发现此实施有任何问题,请添加赞成票将不胜感激.

Javascript相关问答推荐

二维数组,过滤并返回带有索引而不是值的新数组

如何使用JavaScript向html元素添加样式

如何expose 像React在onChange、onClick等中所做的那样的参数?

如何循环访问对象数组并以关键值形式获得结果?

WebRTC关闭navigator. getUserMedia正确

分层树视图

阿波罗返回的数据错误,但在网络判断器中是正确的

WhatsApp Cloud API上载问题:由于MIME类型不正确而导致接收&Quot;INVALID_REQUEST";错误

如何在Angular拖放组件中同步数组?

变量在导入到Vite中的另一个js文件时成为常量.

如何限制显示在分页中的可见页面的数量

Reaction-SWR-无更新组件

删除加载页面时不存在的元素(JavaScript)

如果没有页面重新加载Angular ,innerHTML属性绑定不会更新

无法检索与Puppeteer的蒸汽游戏的Bundle 包价格

如何在脚本编译后直接将RxJ模块导入浏览器(无需Angel、webpack、LiteServer)

如果NetSuite中为空,则限制筛选

与在编剧中具有动态价值的定位器交互

AG-GRIDreact 显示布尔值而不是复选框

设置复选框根据选中状态输入选中值