升级react-admin v2到v3,权限一直为空,context不一致
Upgrade react-admin v2 to v3, permissions is always empty and context is not consistent
我被困在 react-admin v2
到 v3
的升级中,在我像这样包装 layout
时出现两个奇怪的问题:
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
总是 undefined
,而 authProvider.getPermissions()
总是 return 非空权限数组。
这是调试器中的视图,它显示传递给 AppContextProvider
的值,我们看到 permissions
是 undefined
而 references
不为空:
此屏幕截图显示了当我们尝试读取它时上下文中的内容,我们可以看到 references
现在是一个空对象:
它在 react-admin v2 中运行良好。
我们的目标是:
- 使用来自引用对象的引用,而不是在我们的应用程序中到处编写硬引用。
- 创建一个
pages
对象,该对象取决于用户对应用程序的权限,因此我们不会在应用程序的任何地方编写硬链接。
最近发生了什么变化,可能导致 v3 出现这种奇怪的行为?
阅读 https://github.com/marmelab/react-admin/blob/master/UPGRADE.md
中的以下部分
请注意,不鼓励(并且未记录)从上下文直接访问 authProvider。如果您需要与 authProvider 交互,请使用新的 auth hooks:
使用登录
使用注销
使用认证
使用授权状态
使用权限
我解决了与 React admin 无关的问题。我在我创建的上下文中使用 useState
,阻止它刷新。删除 useState
是解决方案。
我被困在 react-admin v2
到 v3
的升级中,在我像这样包装 layout
时出现两个奇怪的问题:
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
总是undefined
,而authProvider.getPermissions()
总是 return 非空权限数组。
这是调试器中的视图,它显示传递给 AppContextProvider
的值,我们看到 permissions
是 undefined
而 references
不为空:
此屏幕截图显示了当我们尝试读取它时上下文中的内容,我们可以看到 references
现在是一个空对象:
我们的目标是:
- 使用来自引用对象的引用,而不是在我们的应用程序中到处编写硬引用。
- 创建一个
pages
对象,该对象取决于用户对应用程序的权限,因此我们不会在应用程序的任何地方编写硬链接。
最近发生了什么变化,可能导致 v3 出现这种奇怪的行为?
阅读 https://github.com/marmelab/react-admin/blob/master/UPGRADE.md
中的以下部分请注意,不鼓励(并且未记录)从上下文直接访问 authProvider。如果您需要与 authProvider 交互,请使用新的 auth hooks:
使用登录 使用注销 使用认证 使用授权状态 使用权限
我解决了与 React admin 无关的问题。我在我创建的上下文中使用 useState
,阻止它刷新。删除 useState
是解决方案。