Ошибка при удалении: невозможно прочитать свойство 'id' из неопределенного - PullRequest
0 голосов
/ 23 апреля 2020

Вот мои компоненты / список задач .. js

import React,{Component} from 'react';
import * as uuid from 'uuid';
import { render } from '@testing-library/react';


class TodoList extends React.Component{

    state={
        text:''
    }
    onChange=(e)=>{
        this.setState({
            text:e.target.value,
        })
    }
    onClick=()=>{
        const id =uuid.v4();
        this.props.addTodo(id,this.state.text)
    }

    onDelete=()=>{

       this.props.deteleTodo(this.props.todos.id)}

    render(){

        return(
            <div>
                <ul>
                    {this.props.todos.map((todo)=>(
                        <li key={todo.id}>{todo.text}

                        <button onClick={this.onDelete}>delete</button> 
                        </li>
                    )

                    )}
                </ul>

                    <input value ={this.state.text} onChange= {this.onChange}/>
                     <button onClick={this.onClick}> Add toto</button>
            </div>
        )

    }
}
export default TodoList

Вот мои действия / add-todo. js

export const addTodo =(id,text)=>({
     type:'ADD_TODO',
     payload:{id,text},
});
export const deteleTodo=(id)=>({
    type: 'REMOVE_TODO',
    payload:id
})

Вот мои контейнеры /todo-list.js

import {addTodo,deteleTodo} from '../actions/add-todo'

const mapStateToProps=(state)=>({
    todos:state.todos,
})
const mapDispatchToProps=(dispatch)=> 
{
    return{
    addTodo:(id,text)=>dispatch(addTodo(id,text)),
    deteleTodo:(id)=>dispatch(deteleTodo(id))
}
}
export default connect (mapStateToProps,mapDispatchToProps)(TodoList)

вот мой индекс редукторов и задачи. js

export default (state =[],action)=>{
    switch (action.type){
        case 'ADD_TODO':
            return[...state, action.payload];
        case 'REMOVE_TODO':
            const newState=state.filter((todo)=>todo.id !== action.payload.id);
            return newState;
        default:
            return state;
    }
}

import {combineReducers} from 'redux'
import todosReducer from './todos'

export default combineReducers({
    todos:todosReducer,
})

Ответы [ 2 ]

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

Похоже, вам нужно передать идентификатор задачи в onDelete() функцию. Что-то вроде:

{this.props.todos.map((todo)=>(
        <li key={todo.id}>{todo.text}
            <button onClick={() => this.onDelete(todo.id)}>delete</button> 
        </li>
    )
)}

А затем используйте его в своем onDelete():

onDelete = (id) => { this.props.deteleTodo(id) }
0 голосов
/ 23 апреля 2020

изменить на это:

export default (state =[],action)=>{
   switch (action.type){
     case 'ADD_TODO':
        return {...state, action.payload};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...