Как добавить значения формы при отправке в таблицу с помощью React Hooks - PullRequest
0 голосов
/ 03 февраля 2020

Я создаю приложение для управления проектами, и я немного новичок в Hooks, поэтому, пожалуйста, потерпите меня.

Ссылка на приложение , ссылка на code .

У пользователя должна быть возможность добавить новый проект. Они могут добавить имя, описание и дату, которые затем будут автоматически добавлены в таблицу.

В настоящее время я не могу заставить ее работать. Пользователь не может добавить новый проект.

Я могу ввести новую дату в поле Дата - но всякий раз, когда я пытаюсь ввести поле Имя или Описание, значения не отображаются, и я получаю выдается консольных ошибок:

"Предупреждение. Это событие синтеза c используется повторно по соображениям производительности. Если вы видите это, вы получаете доступ к методу isDefaultPrevented в освобожденном / аннулированном синтезаторе c event. Это неоперационная функция. Если вам нужно сохранить исходное событие syntheti c, используйте event.persist (). "

Основные проблемы, которые я пытаюсь исправить:

  • Разрешить пользователю вводить в поля
  • При нажатии кнопки отправки они go попадают в соответствующие им области таблицы

В моем коде mainCrud . js содержит начальные данные, а также функциональность Добавить проект. Данные передаются в фактический компонент CrudAdd, в котором находится форма «Добавить проект»:

import React, { useState } from "react";

import CrudIntro from "../crud/crudIntro/crudIntro";
import CrudAdd from "../crud/crudAdd/crudAdd";
import CrudTable from "../crud/crudTable/crudTable";

const MainCrud = props => {
  // Project Data
  const projectData = [
    {
      id: 1,
      name: "Skid Steer Loaders",
      description:
        "To advertise the skid steer loaders at 0% financing for 60 months.",
      date: "February 1, 2022"
    },
    {
      id: 2,
      name: "Work Gloves",
      description: "To advertise the work gloves at $15.",
      date: "February 15, 2022"
    },
    {
      id: 3,
      name: "Telehandlers",
      description: "To advertise telehandlers at 0% financing for 24 months.",
      date: "March 15, 2022"
    }
  ];

  const [projects, setProject] = useState(projectData);

  // Add Project
  const addProject = project => {
    project.id = projectData.length + 1;
    setProject([...projects, project]);
  };

  return (
    <div>
      <section id="add">
        <CrudIntro title={props.title} subTitle={props.subTitle} />
        <CrudAdd addProject={addProject} />
      </section>
      <section id="main">
        <CrudTable projectData={projects} />
      </section>
    </div>
  );
};

export default MainCrud;

В CrudAdd. js я устанавливаю начальное состояние формы, обновляя состояние форму и добавление формы отправить:

import React, { useState } from "react";

import "../crudAdd/crud-add.scss";
import "../../button.scss";

const CrudAdd = props => {
  // Set the initial state of the form
  const initialFormState = {
    id: null,
    name: "",
    description: "",
    date: ""
  };
  const [project, setProject] = useState(initialFormState);

  // Update state within the form
  const handleInputChange = e => {
    const { name, value } = e.target;
    setProject({ ...project, [name]: value });

    console.log(e);
  };

  return (
    <div>
      <form
        onSubmit={e => {
          e.preventDefault();
          if (!project.name || !project.username) return;

          props.addProject(project);
          setProject(initialFormState);
        }}
      >
        <input
          type="name"
          placeholder="Name..."
          id="name"
          value={project.name}
          onChange={handleInputChange}
        />
        <input
          type="description"
          placeholder="Description..."
          id="description"
          value=""
        />
        <input type="name" placeholder="Date..." id="date" />
      </form>
      <button className="btn btn-primary">Add Project</button>
    </div>
  );
};

export default CrudAdd;

Есть идеи? Заранее спасибо.

1 Ответ

0 голосов
/ 03 февраля 2020

Я понял, в чем проблема в вашем коде. Вы не добавили name свойство в поля ввода

<input
  name="name"
  type="name"
  placeholder="Name..."
  id="name"
  value={project.name}
  onChange={handleInputChange}
/>
<input
  name="description"
  type="description"
  placeholder="Description..."
  id="description"
  value={project.description}
/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...