Реагируйте: почему новые задачи (в поле) не определены? - PullRequest
0 голосов
/ 01 апреля 2020

Я новичок в реакции, поэтому я пытаюсь сделать это с помощью приложения задач, но по какой-то причине, когда я пытаюсь "проверить" задачу, я выдал ошибку с const newTasks , я пытался дать начальные значения, и показать его на консоли, но просто кажется, что значения, могут быть сформированы метод фильтра ????

задач. json // пример данных

[
        {
            "id": 0,
            "title": "espada",
            "description": "esta es un arma japonesa que bla bla bla bla bla bla bla bla",
            "done" : false
        },
        {
            "id": 1,
            "title": "pistola",
            "description": "pistola semi-automatica que sirve para pegar tiros bla bla bla",
            "done" : false
        },
        {
            "id": 2,
            "title": "ballesta",
            "description": "loren ipsum dolor no se que carajos seguia despues bla bla bla",
            "done" : true
        },
        {
            "id": 3,
            "title": "sable pistola",
            "description": "sacado de la franquisia de juegos mas alabado, a un nerd se le",
            "done" : false
        }
]

индекс . js

import React, { Component }from 'react'  
import ReactDOM from 'react-dom'
import './index.css';
// Components
import TaskForm from './components/TaskForm';

import tasks from './samples/tasks.json'
import Tasks from './components/tasks'

class App extends Component{ 
    state = {
        tasks : tasks
    }

    addTask = (title, description) => {
        const newTask = {
            id: this.state.tasks.length,
            title: title,
            description: description,
            done: false
        };
        this.setState(state => ({
            tasks : [...state.tasks, newTask]
        }));
        console.log(this.state)
    }

    deleteTask = id => {
        const newtasks = this.state.tasks.filter(task => task.id !== id);
        this.setState(state => ({
            tasks: newtasks
        }));
    }

    checkDone = id => {
        const newTasks = this.state.tasks.filter(task => {
            if (task.id === id) {
                console.log("funciona" + task.id)
//              task.done = !this.state.task.done
//              return tasks;
//          } else {
//              return task
            }
            console.log(task.id);
        });
        console.log(newTasks[0].id)
//      this.setState({tasks: newTasks});
}

render() {
    return (
        <div>
            <TaskForm addTask={this.addTask}/>
            <Tasks 
                tasks={this.state.tasks} 
                deleteTask={this.deleteTask} 
                checkDone={this.checkDone}
            />
        </div>
    )
}

заданий. js

import React, { Component } from 'react';
import Task from './Task';
import propTypes from 'prop-types';

export default class Tasks extends Component {
    render() {
        return (
            this.props.tasks.map(task => 
            <Task 
                task={task} 
                key={task.id} 
                deleteTask={this.props.deleteTask}
                checkDone={this.props.checkDone}
            />)
        );
    }
}
Tasks.propTypes = {
    tasks: propTypes.array.isRequired
}

заданий. js

import React,{ Component } from "react";
import propTypes from 'prop-types';

export default class Task extends Component{
     state = {
        done: this.props.task.done
    }
    styleCompleted() {
       return {
            fontSize: '20px',
            color: this.props.task.done ? 'grey' : 'black',
            textDecoration: this.props.task.done ? 'line-through' : 'none'
        }
    }
    render() {
        const {task} = this.props; // con esta linea extraemos el arreglo que nos stan devolviendo y lo guardamos en otro llamado task        
        return (
            <div style={this.styleCompleted()}>
                {task.title} -  
                {task.id} - 
                {task.description}  
                <input 
                    type="checkbox" 
                    onChange={this.props.checkDone(task.id)}
                />
                <button 
                    style={btnDelete} 
                    onClick={this.props.deleteTask.bind(this, task.id)}
                >
                  x
                </button>
            </div>     
        );
    }
}

Task.propTypes = {
    task: propTypes.object.isRequired
}


const btnDelete = {
    fontSize: '18px',
    background: 'red',
    color: '#fff',
    border: 'none',
    padding: '10px 15px',
    borderRadius: '50%',
    cursor: 'pointer'
}

спасибо за вашу помощь

1 Ответ

0 голосов
/ 01 апреля 2020

Я буду использовать карту вместо фильтра.

Фильтр используется для удаления элементов из списка.

Если вы хотите изменить некоторые элементы, я сделаю:

function setAsDone(id) {
  const updatedList = list.map((task) => {
    return {
      ...task, // keep prevousValue
      done: id === task.id ? true : task.done
      // if current task has your id set as true
      // if not, let current value
    }
  })
  
  setState({
    tasks: updatedList
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...