【发布时间】:2015-12-22 06:20:32
【问题描述】:
我有一个组件,它从 Redux 传递了一个“用户”属性,看起来像这样:
user: {
user: {
photos: []
},
userIsFetching: false,
userIsFetchError: false
}
当“照片”更新时,React 不会重新渲染。我可以在 Redux 日志中看到“照片”确实得到了更新。这个问题是因为“照片”嵌套太深吗?
这是减速器:
function deleteUserPhoto(user, id) {
return {
...user,
photos: deletePhoto(user.photos, id)
};
}
function deletePhoto(photos, id) {
return photos.filter(photo =>
photo.id !== id
);
}
export function user(state, action) {
if (typeof state === 'undefined') {
state = {
user: null,
userIsFetching: false,
userIsFetchError: false
}
}
switch (action.type) {
case USER_REQUEST:
return {
...state,
userIsFetching: true
};
case USER_RESPONSE:
return {
...state,
user: action.user
};
case USER_RESPONSE_ERROR:
return {
...state,
userIsFetching: false,
userIsFetchError: true
};
case PHOTO_DELETE:
return {
...state,
user: deleteUserPhoto(state.user, action.id)
};
default:
return state;
}
}
谢谢。
【问题讨论】:
-
你很可能用别的东西覆盖了
user属性。 -
同意。虽然我无法立即找出问题所在,但要正确设置嵌套对象可能会很棘手,并且可能有一些微妙的方法来改变你不应该改变的东西。您可以考虑使用 github.com/gaearon/normalizr 之类的东西来扁平化您的商店。另外,当响应返回时,您是否撤消了您的标志?
-
这些标志用于原始用户获取。当我与页面交互时(例如触发 onClick),页面会更新为正确的照片。
标签: javascript reactjs redux