gpt4 book ai didi

javascript - Redux 不更新组件

转载 作者:行者123 更新时间:2023-11-30 00:16:49 25 4
gpt4 key购买 nike

我有一个组件从 Redux 传递了一个“用户” Prop ,看起来像这样:

user: {
user: {
photos: []
},
userIsFetching: false,
userIsFetchError: false
}

当“照片”更新时,React 不会重新渲染。我可以在 Redux 日志中看到“照片”确实得到了更新。这个问题是因为“照片”嵌套很深吗?

这是 reducer :

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;
}
}

谢谢。

最佳答案

在你的真实代码中可能不是这种情况,但从我在你的代码示例中看到的:在 deletePhoto 方法中,调用 filter 应该抛出一个 TypeError 作为photos 在您的初始状态下未定义。

只要返回一个新的状态,深度嵌套的属性是完全没有问题的。它有时会变得很麻烦,但是像 ImmutableJS 这样的库可以帮助我们管理非常复杂的状态。调用操作后未更新 View 是一个常见问题,通常由突变状态引起:http://rackt.org/redux/docs/Troubleshooting.html

关于javascript - Redux 不更新组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34409627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com