无法为 put 方法编辑 reducer 中的数据
unable to edit data in reducer for put method
我正在创建一个 mern 应用程序,我正在尝试编辑所选项目的数据。当我点击编辑时,数据在 mongodb 和 express server logger 中编辑,但不是在 redux logger 响应中,我在编辑之前得到状态的响应。我不确定到底是什么问题..
数据示例
{
_id:1,
title:'title',
description:"description"
}
当我将 title
编辑为 title edited
的值时,它是在 mongoDb 中编辑的,但不是在 redux 记录器操作响应中。它声明 title:'title'
。我只能在刷新页面后获取编辑项的值。
减速机
case projectActions.UPDATE_PROJECT:
{
return { ...state,
project:state.project.map( item =>
(item._id===action.payload.data._id) ?
action.payload.data:item)
}
}
更新操作
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)))
}
}
正在调度编辑操作
this.props.actions.updateProject(this.props._id,{title:this.state.title})
更新 express 中间件
router.put('/api/project/:id',function(req,res,next){
Project.findByIdAndUpdate(req.body._id, req.body, function(err, updatedProject){
res.json(updatedProject)
})
})
经过一些研究并基于 this article,我发现问题出在 findByIdAndUpdate
,因为 new
选项默认为 false,通过扩展它没有 return 更新的数据。
为了解决这个问题,我必须设置 { new: true}
才能获取更新的数据。
router.put('/api/project/:id',function(req,res,next){
Project.findByIdAndUpdate(req.body._id, req.body, { new: true} , function(err, updatedProject){
res.json(updatedProject)
})
})
我正在创建一个 mern 应用程序,我正在尝试编辑所选项目的数据。当我点击编辑时,数据在 mongodb 和 express server logger 中编辑,但不是在 redux logger 响应中,我在编辑之前得到状态的响应。我不确定到底是什么问题..
数据示例
{
_id:1,
title:'title',
description:"description"
}
当我将 title
编辑为 title edited
的值时,它是在 mongoDb 中编辑的,但不是在 redux 记录器操作响应中。它声明 title:'title'
。我只能在刷新页面后获取编辑项的值。
减速机
case projectActions.UPDATE_PROJECT:
{
return { ...state,
project:state.project.map( item =>
(item._id===action.payload.data._id) ?
action.payload.data:item)
}
}
更新操作
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)))
}
}
正在调度编辑操作
this.props.actions.updateProject(this.props._id,{title:this.state.title})
更新 express 中间件
router.put('/api/project/:id',function(req,res,next){
Project.findByIdAndUpdate(req.body._id, req.body, function(err, updatedProject){
res.json(updatedProject)
})
})
经过一些研究并基于 this article,我发现问题出在 findByIdAndUpdate
,因为 new
选项默认为 false,通过扩展它没有 return 更新的数据。
为了解决这个问题,我必须设置 { new: true}
才能获取更新的数据。
router.put('/api/project/:id',function(req,res,next){
Project.findByIdAndUpdate(req.body._id, req.body, { new: true} , function(err, updatedProject){
res.json(updatedProject)
})
})