【发布时间】:2018-10-06 14:52:43
【问题描述】:
我正在使用 Node.js API 编写一个 React Redux CRUD 应用程序。我正在努力处理 DELETE 部分。 我收到了成功的删除消息,但我的数据库中没有任何变化。 Successful Message in Console
我只是想知道为什么它没有删除任何数据?
user.reducer:
import { userConstants } from '../_constants';
export function users(state = {}, action) {
switch (action.type) {
case userConstants.GETALL_REQUEST:
return {
loading: true
};
case userConstants.GETALL_SUCCESS:
return {
items: action.users
};
case userConstants.GETALL_FAILURE:
return {
error: action.error
};
case userConstants.DELETE_REQUEST:
// add 'deleting:true' property to user being deleted
return {
...state,
items: state.items.map(user =>
user.id === action.id
? { ...user, deleting: true }
: user
)
};
case userConstants.DELETE_SUCCESS:
// remove deleted user from state
return {
items: state.items.filter(user => user.id !== action.id)
};
case userConstants.DELETE_FAILURE:
// remove 'deleting:true' property and add 'deleteError:[error]' property to user
return {
...state,
items: state.items.map(user => {
if (user.id === action.id) {
// make copy of user without 'deleting:true' property
const { deleting, ...userCopy } = user;
// return copy of user with 'deleteError:[error]' property
return { ...userCopy, deleteError: action.error };
}
return user;
})
};
default:
return state
}
}
user_actions:
export const userService =
{
delete: _delete,
};
function _delete(id) {
const requestOptions = {
method: 'DELETE',
// headers: authHeader(),
};
return fetch(`/removeadmin/${id}` , requestOptions).then(handleResponse);
}
AdminListPage 组件:
delete(){
this.props.dispatch(userActions.delete(this.state.delete_user._id));
}
另外,在服务器端,我收到了成功的删除状态
服务器端路由器:
app.delete('/removeadmin/:id', function(req, res)
{
var sent_url = url.parse(req.url, true),
qdata = sent_url.query,
sent_id = qdata.id;
console.log('id ' + sent_id);
admin.removeadmin(sent_id, function(err, user) {
if (err)
throw err;
});
服务器端删除功能:
module.exports.removeadmin = function(id, callback){
var query = { _id: id };
Admin.remove(query, callback);
};
我在没有 redux 的组件中通过简单的 fetch 命令删除了一个用户,我在删除请求的正文中发送了 id,它正在工作,但 redux 只是成功的消息。
感谢您的帮助
【问题讨论】:
-
为什么需要在 reducer 中删除操作?您的状态应该反映您的数据库。我没有得到我们上面的状态。不要手动从状态中删除数据,只需触发操作并在成功删除时从数据库中删除,返回所有用户,然后用新列表替换您的状态中的现有列表。这样做将确保您的状态完全反映您的数据库。我不明白你在上面做什么。最多简化您的状态,您只需要在 reducer 中执行 ADD_LIST 操作类型、IS_FETCHING、DID_INVALIDATED 等操作。
-
@NuruSalihu 我想通过 redux 进行删除。我已经按照一个例子这样做了。是的,你是对的,我不应该手动从状态中删除数据。在简单的获取中,我做到了,但没有使用 redux。谢谢
-
@AmrAly 不,两个不同的端口
-
@Nafis 你能在上面更新你的减速器,并留下失败的删除案例/操作吗?现在它漫长而令人困惑。只留下失败的代码。然后我们将查看状态动作。或者你能告诉我失败的动作类型是什么?
-
@NuruSalihu 谢谢Nuru,我已经添加了我的答案,它正在工作。但是如果告诉我为什么我不应该在 reducer 中删除,我会很高兴?
标签: node.js reactjs react-redux