我有一个后端mongoose数据库(在Express with NodeJS上),带有反应前端。该数据库由一个经过身份验证的用户(使用bcrypt和jwt)和“显示”组成。所有人都能看到节目,但只有经过身份验证的用户才能发布/编辑/删除节目。
我在“编辑节目”部分遇到了麻烦。猫鼬找到正确的节目进行编辑并做出反应后,“ shows” reduce完全停止工作,并且如果我尝试重新加载上一页,则会收到一条消息,提示show.map不是功能。这很可能与我在编辑之前加载一个节目的方式有关,但是我尝试了我能想到的所有内容(state.filter / state.find或只是action.show),但没有运气。我应该补充一点,如果我将GET_SHOW下的return语句更改为“ state”,则重新加载可以正常工作(但我当然无法编辑该节目)。我正在使用React Router进行路由,但我认为这不是问题,因为其他所有功能都可以。
reducer看起来像这样:
const show = (state = [], action) => {
switch(action.type){
case GET_SHOW:
return state.find(show => action.show)
case LOAD_SHOWS:
return [...action.shows];
case EDIT_SHOW:
return action.show;
case REMOVE_SHOW:
return state.filter(show => show._id !== action.id)
default:
return state;
}
}
表演的动作:
export const load = show => ({
type: GET_SHOW,
show
})
export const getShow = (show_id) => (dispatch, getState) =>{
let { setAdmin } = getState();
const id = setAdmin.user.id;
return apiCall("get", `/api/users/${id}/shows/${show_id}/edit`)
.then(res => dispatch(load(res)))
.catch(err => dispatch(addError(err.message)));
}
在此先感谢您的帮助!
答案 0 :(得分:0)
您要在状态对象中保留什么?一个或多个节目?
sig= Gmail.Users.Settings.SendAs.list("me").sendAs.filter(function(account){if(!account.isDefault){return true}})[0].signature;
htmlRange = SheetConverter.convertRange2html(range);
fullBody = htmlRange+"<br><br>--<br><br></p>"+sig;
GmailApp.createDraft(contacts, subject, null,{from:"test@example.com", cc: cc, htmlBody: fullBody});
1)看起来像是越野车。您正在调用case GET_SHOW:
return state.find(show => action.show) -> 1
case LOAD_SHOWS:
return [...action.shows]; -> 2
case EDIT_SHOW:
return action.show; -> 3
case REMOVE_SHOW:
return state.filter(show => show._id !== action.id) -> 4
default:
return state;
的方法,该方法返回被评估为真实的第一个对象。
在您的情况下,如果find
是真实的,它将返回状态数组中的第一个对象。
考虑以下示例:
action.show
结果将等于const state = [ 'exampleShow1', 'exampleShow2'];
const mockAction = { type: GET_SHOW, show: 'exampleShow3'}
const result = state.find(show => mockAction.show)
如果您要使用操作中的数据创建新数组,则可以返回新数组
'exampleShow1'
2)在这里,您将返回一个新的节目数组(状态是一个数组)
3)在这里,您只返回一次演出(状态是一个对象)
4)在这里,您将返回数组而不是一个节目。 (状态是一个数组)
您需要使状态保持一致。