通过Button删除资源后,我使用GET更新了相同的资源,我获得了具有正确数据的响应,但是redux存储没有更新(显然redux操作看不到任何差异),因此道具是未更新。
但是,当我这次创建一个CREATE然后执行一个像以前一样的GET(相同的调用)时,redux存储会看到diff并更新道具。
两个调用之间的资源是相同的(在DELETE或CREATE之后),并且调用甚至是相同的。为什么在一种情况下,redux存储看到差异而在另一种情况下看不到差异?
crudCreate(`${CAMPAIGNS}/${id}/${LINE_ITEMS}`, data, () =>
crudGetAll(LINE_ITEMS, {}, { campaignId: id }, 1000, () => this.displayModal()),
);
crudDelete(LINE_ITEMS, lineItem.id, { id }, lineItem, () =>
crudGetAll(LINE_ITEMS, {}, { campaignId: id }, 1000, ({ payload: { data } }) =>
this.updateLineItems(data),
),
);
我在Redux调试器或控制台上没有任何错误。我有一个自定义的DataProvider,在这种情况下,它只会重定向好路线
case LINE_ITEMS: {
if (type === 'DELETE') {
return { urn: `${apiUrl}/campaigns/${filter.id}/${resource.toLowerCase()}/${id}` };
}
if (filter) {
if ('campaignId' in filter) {
return {
urn: `${apiUrl}/campaigns/${filter.campaignId}/${resource.toLowerCase()}`,
filter: {
...filter,
campaignId: undefined,
},
};
}
}
return {
urn: `${apiUrl}/campaigns/${id.campaignId}/${resource.toLowerCase()}/${data.lineItemId}`,
};
}
我只使用react-admin的reducer,这里是我的index.js
:
import { connect } from 'react-redux';
import { crudDelete, crudGetAll, translate } from 'react-admin';
export default connect(
state => ({
lineItems: Object.values(state.admin.resources.lineItems.data) || {},
swordData: Object.values(state.admin.resources.sword.data),
}),
{ crudDelete, crudGetAll },
)(withRouter(WithPermissions(translate(MyComponent))));
有人有想法吗?谢谢您的帮助