当我像这样包装layout
时,我陷入了react-admin v2
到v3
升级的困境,有两个奇怪的问题:
composeLayout(Layout) {
const ComponentLayout = ({ references, dispatch, ...props }) => ( // eslint-disable-line no-unused-vars
<WithPermissions
// eslint-disable-next-line no-unused-vars
render={({ permissions }) => (
<AppContextProvider
permissions={permissions}
references={references}
>
<Layout {...props} />
</AppContextProvider>
)}
/>
);
const mapStateToProps = (state) => {
const references = {};
Object.keys(state.admin.resources).forEach((name) => {
set(references, `${camelizePath(name)}.name`, name);
});
return { references };
};
return connect(mapStateToProps)(ComponentLayout);
}
references
设置正确,但随后从上下文中读取时始终为空对象permissions
始终为未定义
,而authProvider.getPermissions()
始终返回非空权限数组。
这是调试器中的 View ,它显示传递给 AppContextProvider
的值,我们看到 permissions
是 undefined
和 references
不为空:
此屏幕截图显示了当我们尝试读取上下文时的内容,我们可以看到 references
现在是一个空对象:
我们的目标是:
- 使用引用对象中的引用,而不是在我们的应用中随处编写硬引用。
- 创建一个取决于用户对应用的权限的
pages
对象,这样我们就不会在应用中的任何地方编写硬链接(hard link)。
最近发生了什么变化可能导致 v3 中出现如此奇怪的行为?
最佳答案
阅读 https://github.com/marmelab/react-admin/blob/master/UPGRADE.md 中的以下部分
请注意,不鼓励从上下文直接访问 authProvider(且未记录)。如果您需要与 authProvider 交互,请使用新的 auth hooks:
使用登录 使用注销 使用已验证 使用验证状态 使用权限
关于javascript - 升级react-admin v2到v3,权限始终为空且上下文不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59408349/