如何访问数据提供者中的react-admin存储? [反应管理员 4.x]

问题描述 投票:0回答:2

在进行 API 调用时,我尝试使用 react admin store 中的用户设置变量。

具体来说,我在商店中存储了一个工作区 ID,用户可以通过切换器进行设置。我希望在进行 API 调用时能够访问此 ID,以便我可以将工作区 ID 作为 API 请求中的 url 参数发送。

一种解决方案是尝试直接从本地存储获取数据,但这似乎很麻烦。有更好的办法吗

我正在使用最新版本的react admin

react-admin
2个回答
1
投票

在最新版本的 React-admin 中,传递参数如下:

“React-admin v4 在 dataProvider 查询中引入了元选项,让您可以向任何 API 调用添加额外的参数。 从react-admin v4.2开始,您现在可以在

<List>, <Show>, <Edit> and <Create>
组件中指定自定义元, 通过 queryOptions 和mutationOptions 属性。”

https://marmelab.com/blog/2022/09/05/react-admin-septempter-2022-updates.html#set-query-code-classlanguage-textmetacode-in-page-components

import { Edit, SimpleForm } from 'react-admin'

const PostEdit = () => (
    <Edit mutationOptions={{ meta: { foo: 'bar' } }}>
        <SimpleForm>...</SimpleForm>
    </Edit>
)

1
投票

@MaxAlex 方法效果很好,但我采用了 localStorage 路由,通过在使用 dataprovider 定义的 fetchHTTP 客户端中设置标头。这样我就不用修改每条路线了。

const httpClient = (url: any, options: any) => {
  if (!options) {
    options = {};
  }
  if (!options.headers) {
    options.headers = new Headers({ Accept: 'application/json' });
  }

  const token = inMemoryJWT.getToken();
  const organization = localStorage.getItem('RaStore.organization');

  if (token) {
    options.headers.set('Authorization', `Bearer ${token}`);
  } else {
    inMemoryJWT.getRefreshedToken().then((gotFreshToken) => {
      if (gotFreshToken) {
        options.headers.set(
          'Authorization',
          `Bearer ${inMemoryJWT.getToken()}`,
        );
      }
    });
  }

  if (organization) {
    options.headers.set('Organization-ID', organization);
  }

  return fetchUtils.fetchJson(url, options);
};

我还研究了反应管理内部结构,商店提供者比数据提供者低一级。这意味着如果不重构整个管理提供程序堆栈,就没有一种简单的方法来访问商店。

© www.soinside.com 2019 - 2024. All rights reserved.