升级react-admin v2到v3,权限一直为空,context不一致

Upgrade react-admin v2 to v3, permissions is always empty and context is not consistent

我被困在 react-admin v2v3 的升级中,在我像这样包装 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);
  }

这是调试器中的视图,它显示传递给 AppContextProvider 的值,我们看到 permissionsundefinedreferences 不为空:

此屏幕截图显示了当我们尝试读取它时上下文中的内容,我们可以看到 references 现在是一个空对象:

它在 react-admin v2 中运行良好。

我们的目标是:

最近发生了什么变化,可能导致 v3 出现这种奇怪的行为?

阅读 https://github.com/marmelab/react-admin/blob/master/UPGRADE.md

中的以下部分

请注意,不鼓励(并且未记录)从上下文直接访问 authProvider。如果您需要与 authProvider 交互,请使用新的 auth hooks:

使用登录 使用注销 使用认证 使用授权状态 使用权限

我解决了与 React admin 无关的问题。我在我创建的上下文中使用 useState,阻止它刷新。删除 useState 是解决方案。