在put方法之后更新reducer中的状态

时间:2018-01-26 18:51:08

标签: reactjs redux

我正在尝试创建一个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的图片

该值在数据库中更新,但尚未更新道具,您可以在下一个状态值中看到。

1 个答案:

答案 0 :(得分:1)

快速传播传播道具和对象定义;

state将是您以前的状态对象。 ...state表示“提取此对象上的所有变量”。

因此,如果state{test: 'foo', test2: 'bar'},则...statetest: '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)应该为您提供大量信息。