关于reactjs:无法在reducer中为put方法编辑数据

unable to edit data in reducer for put method

我正在创建一个现代应用程序,并且试图编辑所选项目的数据。当我点击编辑时,数据在mongodb和express server logger中进行编辑,但在redux logger响应中却没有,在编辑之前我得到状态的响应。我不确定到底是什么问题..

数据示例

1
2
3
4
5
{
_id:1,
title:'title',
description:"description"
}

当我将title编辑为值title edited时,将在mongoDb中对其进行编辑,但不会在redux logger动作响应中进行编辑。它声明title:'title'。刷新页面后,我只能获取已编辑项目的值。

减速器

1
2
3
4
5
6
7
8
9
10
case projectActions.UPDATE_PROJECT:
        {

            return { ...state,
                      project:state.project.map( item =>
                           (item._id===action.payload.data._id) ?
                               action.payload.data:item)
                   }

        }

更新操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function updateProjectAction(response){
    return {
        type:UPDATE_PROJECT,
        payload:response
    }
}

export function updateProject(id,updatedVal){
    return (disptsh, getState) => {
        return Project.editProject(id,updatedVal)
                      .then(response=>disptsh(updateProjectAction(response)))
                      .catch((error)=>disptsh(getError(error)))
    }
}

发送编辑动作

1
this.props.actions.updateProject(this.props._id,{title:this.state.title})

更新快速中间件

1
2
3
4
5
router.put('/api/project/:id',function(req,res,next){
    Project.findByIdAndUpdate(req.body._id, req.body, function(err, updatedProject){
        res.json(updatedProject)
    })
})


在进行了一些研究之后,根据本文,我发现问题出在findByIdAndUpdate上,因为new选项默认情况下为false,并且从某种意义上说,它不返回更新的数据。铅>

要解决此问题,我必须设置{ new: true}才能获取更新的数据。

1
2
3
4
5
router.put('/api/project/:id',function(req,res,next){
    Project.findByIdAndUpdate(req.body._id, req.body, { new: true} , function(err, updatedProject){
        res.json(updatedProject)
    })
})