即使在更新道具后,Redux也不会更新组件。我有一个在其中包含lists
的数据,每个列表在其中也可以包含一个cards
,在其中也可以包含lists
(例如folder内部的文件夹)。 cards
和lists
基本上是对象数组。
这是示例数据-
"data": [
{
"name": "new list",
"id": 31,
"created_at": "2018-11-07 17:48:10+05:30",
"lists": [],
"cards": [
{
"name": "new call",
"id": 8,
"display_order": 0,
"due_at": null,
"user_list_id": 31,
"description": null,
"created_at": "2018-11-08T16:34:14+05:30",
"labels": null
},
{
"name": "testing",
"id": 9,
"display_order": 2,
"due_at": null,
"user_list_id": 31,
"description": null,
"created_at": "2018-11-08T20:07:12+05:30",
"labels": null
},
{
"name": "new card",
"id": 7,
"display_order": 3,
"due_at": null,
"user_list_id": 31,
"description": null,
"created_at": "2018-11-08T16:34:09+05:30",
"labels": null
}
]
},
{
"name": "rename",
"id": 29,
"created_at": "2018-11-04 20:03:54+05:30",
"lists": [],
"cards": [
{
"name": "testing",
"id": 1,
"display_order": 0,
"due_at": null,
"user_list_id": 29,
"description": null,
"created_at": "2018-11-08T16:23:40+05:30",
"labels": null
},
{
"name": "testing again",
"id": 2,
"display_order": 1,
"due_at": null,
"user_list_id": 29,
"description": null,
"created_at": "2018-11-08T16:23:45+05:30",
"labels": null
}
]
}
]
现在,我删除卡后,便从这样的列表中删除卡。
const lists = this.props.lists;
const foundAt = lists.findIndex(e => parseFloat(e.id) === parseFloat(listId));
let cards = lists[foundAt]['cards'];
const cardFoundAt = cards.findIndex(e => parseFloat(e.id) === parseFloat(cardId));
cards.splice(cardFoundAt, 1);
lists[foundAt]['cards'] = cards;
this.props.rearrangeList(lists);
在我的行动中,我有这个
export const rearrangeLists = (lists) => {
return {
type: REARRANGED_LISTS,
payload: lists
};
};
在我的减速器中,我有这个
...
case REARRANGED_LISTS:
return {
...state,
lists: action.payload
};
...
我不知道我在哪里做错了。呈现列表的组件未显示更新的版本,但是当我执行render
时,该component
的{{1}}函数中,我看到它显示的是更新版本,但是在页面,它不会更新。我真的很笨。请帮忙。预先感谢您的帮助。
答案 0 :(得分:0)
您的reducer应该处理从数组中删除项目。
case REMOVE_ITEM:
return data.filter(item => item.id !== payload.item_id)
您应该有一个与此相似的减速器。您的日期将从redux状态传递到您的组件。
答案 1 :(得分:0)
发表这样的想法,认为这样做会有所帮助。
这里的问题是它是一个对象数组,其中包含嵌套的对象数组。
数据结构本身对于redux来说是个问题,这就是为什么使用normalizer之类的东西会使生活变得更加轻松。但是,您仍然可以使用自己的方法解决此问题。这是我在减速器中所做的事情。我发送了要从cardId
中删除的listId
let {lists} = state;
const foundAt = lists.findIndex(e => e.id === listId);
return {
...state,
lists: [
...lists.slice(0, foundAt),
{
...lists[foundAt],
cards: lists[foundAt]['cards'].filter(e => e.id !== cardId)
},
...lists.slice(foundAt + 1)
]
};
我希望这会有所帮助。