在进行 API 调用时,我尝试使用 react admin store 中的用户设置变量。
具体来说,我在商店中存储了一个工作区 ID,用户可以通过切换器进行设置。我希望在进行 API 调用时能够访问此 ID,以便我可以将工作区 ID 作为 API 请求中的 url 参数发送。
一种解决方案是尝试直接从本地存储获取数据,但这似乎很麻烦。有更好的办法吗
我正在使用最新版本的react admin
在最新版本的 React-admin 中,传递参数如下:
“React-admin v4 在 dataProvider 查询中引入了元选项,让您可以向任何 API 调用添加额外的参数。 从react-admin v4.2开始,您现在可以在
<List>, <Show>, <Edit> and <Create>
组件中指定自定义元,
通过 queryOptions 和mutationOptions 属性。”
import { Edit, SimpleForm } from 'react-admin'
const PostEdit = () => (
<Edit mutationOptions={{ meta: { foo: 'bar' } }}>
<SimpleForm>...</SimpleForm>
</Edit>
)
@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);
};
我还研究了反应管理内部结构,商店提供者比数据提供者低一级。这意味着如果不重构整个管理提供程序堆栈,就没有一种简单的方法来访问商店。