我正在尝试创建一个mern crud应用程序,现在我正在尝试编辑项目的值。我正在努力将数据库的当前值更新为状态。
当我发送编辑操作时,redux记录器中的next state
返回值
在编辑之前,我希望它返回状态值及其编辑值。
如何将更新的值返回到reducer中的状态?
这是我的减速机
case projectActions.UPDATE_PROJECT:
{
return {...state,
project:state.project.map(item=>
(item._id===action.payload._id) ? action.payload.data:item )
, ?
}
}
根据我的理解,
...state
是更新前的状态 project:state.project.map(item=> (item._id===action.payload._id) ?
action.payload.data:item)
是更新后的值
?
这是具有更新值的状态。
我不确定我是怎么回来的?任何输入将不胜感激
redux logger的图片
该值在数据库中更新,但尚未更新道具,您可以在下一个状态值中看到。
答案 0 :(得分:1)
快速传播传播道具和对象定义;
state
将是您以前的状态对象。 ...state
表示“提取此对象上的所有变量”。
因此,如果state
为{test: 'foo', test2: 'bar'}
,则...state
为test: 'foo', test2: 'bar'
。请注意丢失的对象括号。
在基于预先存在的对象创建新对象时,这非常有用。 {...state}
正在将state
中的所有属性应用到新对象上。
{...state, test2: 'foobar'}
会根据最右边的值覆盖test2
的值。因此,生成的对象将为{test: 'foo', test2: 'foobar'}
。
这是您为新州定义的前两行所做的。您首先使用...state
应用previos状态属性。然后,您将使用
project
值
state.project.map(item=>
(item._id===action.payload._id) ? action.payload.data:item )
, ?
的最后一行是胡说八道。它应该被删除。
如果这不会导致您期望的新状态,我会尝试在返回之前记录有效负载的值。一个简单的console.log(action.payload)
应该为您提供大量信息。