Reactt JS Todolist Редактирование - PullRequest
0 голосов
/ 25 марта 2019

Я новичок в реагировании и пытаюсь редактировать список задач,

Я могу добавить вход в список, но, по сути, я хочу, чтобы, когда я нажимал на редактирование, я хотел, чтобы моя форма отправляла свой handleSubmit2, который должен редактировать специальный список.item, однако я хочу редактировать, не удаляя элемент в списке, я хочу внести изменения и заменить его, пока я нажимаю кнопку Edit (активация формы onSubmit = {this.handleSubmit2}).

Я хочу сохранить его идентификатор, когдаЯ редактирую и в процессе написания правки ввода я хочу увидеть старый элемент списка в Todo List, но после того, как я нажму edit, его следует заменить новым.

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

import React from "react";
import uuid from "uuid";

class Todolist extends React.Component {
  state = { todolist: "", id: uuid(), edit: "", items: [], editclick: false };

  handleChange = event => {
    this.setState({ todolist: event.target.value });
  };
  handleSubmit = e => {
    e.preventDefault();
    const newstate = { id: this.state.id, todolist: this.state.todolist };
    const updatedstate = [...this.state.items, newstate];
    this.setState({
      items: updatedstate,
      id: uuid(),
      todolist: "",
      editclick: false
    });
  };
  clearList = event => {
    event.preventDefault();
    this.setState({ items: [] });
  };

  handleDelete = id => {
    this.setState({
      items: this.state.items.filter(item => {
        return item.id !== id;
      })
    });
  };
  handleEdit = id => {
    const editing = this.state.items.filter(items => items.id !== id);
    console.log(editing);
    const editing2 = this.state.items.find(items => items.id === id);
    console.log(editing2);
    this.setState({ todolist: editing2.todolist, editclick: true, id: id });
  };

  handleSubmit2 = e => {
    e.preventDefault();
    const newstate = { id: this.state.id, todolist: this.state.todolist };

    const editsubmit = this.state.items.filter(
      items => items.id !== this.state.id || [...this.state.items, newstate]
    );
    console.log(editsubmit);
    this.setState({ items: editsubmit, todolist: "", editclick: false });
  };

  render() {
    return (
      <div className="todoinput container">
        <div className="row">
          <div className="col-md-8 mx-auto text-center my-3 card card-body">
            <form
              onSubmit={
                this.state.editclick ? this.handleSubmit2 : this.handleSubmit
              }
            >
              <h2>Todo Input</h2>
              <div className="input-group">
                <div className="input-group-prepend">
                  <div className="input-group-text text-white bg-primary">
                    <i className="fas fa-book " />
                  </div>
                </div>

                <input
                  type="text"
                  onChange={this.handleChange}
                  value={this.state.todolist}
                  className="form-control"
                  placeholder="Add a Todo Item"
                />
              </div>
              <button
                type="submit"
                className={
                  this.state.editclick
                    ? "btn btn-block bg-success mt-3"
                    : "btn btn-block bg-primary mt-3"
                }
              >
                {this.state.editclick ? "Edit Item" : "Add Item"}{" "}
              </button>
            </form>
          </div>

          <div className="col-md-8 my-3 mx-auto card card-body">
            <ul className="list-group my-4 ">
              <h2 className="text-center">Todo List</h2>

              {this.state.items.map(items => {
                return (
                  <li
                    key={items.id}
                    className="list-group-item d-flex justify-content-between my-2"
                  >
                    {items.todolist}
                    <div>
                      <i
                        className="mx-2 fas fa-pen text-success"
                        onClick={() => this.handleEdit(items.id)}
                      />
                      <i
                        className="mx-2 fas fa-trash text-danger"
                        onClick={() => this.handleDelete(items.id)}
                      />
                    </div>{" "}
                  </li>
                );
              })}
            </ul>
            <button
              className="btn btn-block bg-danger"
              onClick={this.clearList}
            >
              Clear List
            </button>
          </div>
        </div>{" "}
      </div>
    );
  }
}

export default Todolist;
...