Попытка настроить проверку формы в моем основном приложении для списка дел - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь настроить проверки в моем приложении списка задач в реакции; Однако это не похоже на работу. Даже если форма пуста, процесс все равно проходит, и я не знаю, откуда возникла проблема. Я просто следую учебному пособию онлайн, так как я довольно новичок в этом и не знаю, как это сделать сам.

import React from "react";

import * as TodoActions from "../actions/TodoActions";
import TodoStore from "../stores/TodoStore";
import Todo from './Todo.js'
import './Todos.css'

const formValid = ({ formErrors, ...rest }) => {
  let valid = true;

  Object.values(formErrors).forEach(val => {
    val.length > 0 && (valid = false);
  });

  Object.values(rest).forEach(val => {
    val === null && (valid = false);
  });

  return valid;
};

export default class Todos extends React.Component {
  constructor() {
    super();
    this.state = {
      todos: TodoStore.getAll(),
      loading: true,
      formErrors: {
        todo: ""
      }
    };
    TodoActions.receiveTodos()
  }

  componentWillMount() {
    TodoStore.addChangeListener(this.getTodos);
  }

  componentWillUnmount() {
    TodoStore.removeChangeListener(this.getTodos);
  }

  componentDidUpdate() {
    TodoActions.receiveTodos();
  }

  getTodos = () => {
    this.setState({
      todos: TodoStore.getAll(),
      loading: false
    });
  }

  deleteTodo = (id) => {
    TodoActions.deleteTodo(id);
    }

  addItem = (e) => {
    e.preventDefault();
    TodoActions.createTodo(this._inputElement.value)
  }

  handleChange = e => {
    e.preventDefault();
    const { name, value } = e.target;
    let formErrors = { ...this.state.formErrors };

    switch (name) {
    case "todo":
      formErrors.todo =
        value.length < 0 ? "Task cannot be empty" : "";
      break;
    default:
      break;
    }
    this.setState({ formErrors, [name]: value }, () => console.log(this.state));
  }

  render() {
    const { todos } = this.state;
    const { formErrors } = this.state;
    let TodoComponents;


    if (this.state.loading) {
      TodoComponents = <h1>Loading...</h1>;
    } else if(todos.length) {
      TodoComponents = todos.map((todo) => {
          return (
            <div key={todo.id} className="todo-list">
              <Todo key={todo.id} name={todo.name}/>
              <div className="todo-btn"><a type="button" onClick={() => this.deleteTodo(todo.id)} className="delete-btn"><i class="fas fa-trash-alt"></i></a></div>
            </div>
          )
      });
    } else {
      TodoComponents = <p>No tasks to show :)</p>
  }

    return (
      <div className="main-container">
        <div className="small-container">
        <h1 className="title">All Tasks</h1>
        <ul>{TodoComponents}</ul>
        <form onSubmit={this.addItem}>
          <input ref={(a) => this._inputElement = a} placeholder="Enter Task" className="input-form {formErrors.todo.length < 0 ? 'error' : null}"/>
          {formErrors.todo.length < 0 && (
          <span className="errorMessage">{formErrors.firstName}</span>
          )}
          <button type="submit" className="input-btn">Add</button>
        </form>
        </div>
      </div>
    );
  }
}
...