我试图理解react-redux的基本原理,但我被困在这个特殊的案例中:
我的代码操作:
let todoId = 1
export const ADDTODO = 'AddTodo'
export const REMOVETODO = 'RemoveTodo'
export const TOINPROGRESS = 'ToInProgress'
export const TODONE = 'ToDone'
export function addTodo(payload){
return{
type: ADDTODO,
payload:{
status: 'Todo',
id: todoId++,
title: payload.title,
date:payload.date,
description:payload.description,
place:payload.place
}
}
}
export function removeTodo(todoId){
return{
type: REMOVETODO,
payload:todoId
}
}
export function toInProgress(todoId){
return{
type: TOINPROGRESS,
payload:todoId
}
}
export function toDone(todoId){
return{
type: TODONE,
payload:todoId
}
}
我减少代码的尝试:
import { addTodo, removeTodo, toInProgress, toDone } from '../actions';
const initialState = [];
const todos = (state = initialState, action) => {
switch(action.type) {
case 'AddTodo':
return[
...state, {
date:action.payload.date,
description:action.payload.description,
id:action.payload.id,
place:action.payload.place,
status:action.payload.status,
title:action.payload.title,
}
]
case 'RemoveTodo':
console.log(state)
return {
...state,
todos: state.todos.filter(todo => todo.id !== action.id)
}
case 'ToInProgress':
state.map(todo =>(todo.id===action.id)?{...todo,status:"InProgress"}:todo)
case 'ToDone':
state.map(todo =>(todo.id===action.id)?{...todo,status:"Done"}:todo)
default:
return state
}
}
todos减速器的唯一工作方法是添加todo,无法确定如何删除todo,如何继续和todo工作。我在removetodo收到一个typeerror,上面写着“无法读取未定义的属性'filter'”。。。以及来自另外两个方法的未定义返回。你们能帮我个忙吗?提前问候,请忘记我糟糕的语法和编码
2条答案
按热度按时间ohtdti5x1#
在您的情况下,state是一个数组,因此state.todos将是未定义的。你可以用以下方法修复“removetodo”案例
rm5edbpk2#
你错过了
return
在其他情况下,您不需要将每个属性指定给action.payload
照原样传过去,这就是它的样子