React Admin - 如何使用 abc/def 等嵌套路径调用 dataProvider

2024-01-03

React-admin 的Resource组件图name端点的 prop 值。

例如。访问数据。http://example.com/abc, your Resource组件看起来像这样:<Resource name='abc'/>

我想访问什么资源http://example.com/abc/def? This <Resource name='abc/def'/>甚至不调用dataProvider功能。

我不想最终得到像这样丑陋的解决方案:

// App.js
<Resource name='def'/>

// dataProvider.js
if (resource==='def') {
url = 'abc/def'
}

资源名称总是必须没有吗/?有什么技巧吗?


我正在开发一个项目,最终我们编写了自己的 dataProvider,因为我们的 api 并不是严格意义上的 RESTful。

这有点让人难以理解,但一旦你弄清楚了工作流程,它也不算太糟糕。

调用 dataProvider 时基本上会发生三件事

  1. dataProvider 使用参数调用 ConvertDataProviderRequestToHTTP,它返回一个 url 和用于发送 fetch/api 调用(构建请求)的选项
  2. 发送 fetch 请求/api 调用(发送请求)
  3. dataProvider 返回调用convertHTTPResponseToDataProvider 的结果,该函数将响应转换为对接收它的资源有用的内容(处理来自请求的响应)

这是react-admin文档相关部分的链接https://marmelab.com/react-admin/DataProviders.html#writing-your-own-data-provider https://marmelab.com/react-admin/DataProviders.html#writing-your-own-data-provider

我们的解决方案使用 switch 语句,其 case 是类型,然后每个 case 都有处理不同资源的逻辑。

我不确定这是否是预期的实现,但我们最终得到了这样的结果:

// import all the things

// set your api path prefix

const convertDataProviderRequestToHTTP = (type, resource, params) => {
     //switch statement with one case for each action type
     // and some logic where necessary for different resources ie. 
    switch(type){
        case "GET_ONE":{
            // if statements to handle resources with goofy endpoints
            if(resource === 'abc/def'){
                const url = `${API_PREFIX}/abc/def`;
                const options = {
                    // set the specific options that you need for a 
                    // each particular resource
                }
            }

            // handles resources with normal restful endpoints
            const url = `${API_PREFIX}/${RESOURCE}`;
            const options = {
                // this part depends on how you're doing your fetching
                // might need to include the particular rest verb
                // and any other settings
            }
        }

    }
    return {
        url,
        options
    }

}

const convertHTTPResponseToDataProvider = (response, type, resource, params){
    // another switch statement that converts the response that you get
    // from your api to something that's useful to your Resource
    switch(type){
        case 'GET_ONE':{
            if(resource === 'abc/def'){
                // convert response into something useful and return it
                return{
                      data: convertedResponse
                }
            }
        }
    }
}

export default (type, resource, params) => {

    // this comes from react-admin, you could use plain old fetch or
    // your favorite fetch library like axios instead
    const { fetchJson } = fetchUtils;

    // part 1, using the stuff that was sent in the dataProvider 
    // call to generate what you need to sending your fetch
    const { url, options } = convertDataProviderRequestToHTTP(
        type,
        resource,
        params
    );

    // add logic for grabbing your tokens and adding headers to options here
    options.headers.set('headerkey', 'headervalue');

    // part 2 sending the fetch request
    return fetchJson(url, options).then(response =>
        // part 3, converting the response and returning it
        convertHTTPResponseToDataProvider(response, type, resource, params)
    );
};

随着应用程序的发展,我们最终将其分成单独的文件,以便更容易阅读,但到目前为止,它似乎对我们来说还不错。

我必须安装 redux 浏览器工具并插入大量日志记录语句来逐步执行它并更好地了解发生了什么以及何时发生。在获得第一个操作类型/资源组合后,它有点点击并添加到它,从那时起就很容易弄清楚。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React Admin - 如何使用 abc/def 等嵌套路径调用 dataProvider 的相关文章

  • 一個简洁的 antd-react-admin 应用 -- React + Antd 通用后台管理系统

    React Antd Admin 简介 React Antd Admin 一个 JavaScript 应用 项目由业界最优秀的 React 应用开发工具 create react app 初始化创建 搭配 Antd 开箱即用的高质量 Rea
  • 嵌套菜单(子菜单)

    我正在尝试实现子菜单 嵌套菜单 值得一提的是 我正在使用 Hydra 组件 并且之前没有 Redux 的经验 因为这个特定问题 几天前开始学习它 我已按照material ui 上提供的嵌套列表示例https material ui com
  • React Admin 显示非常混乱

    我的 RA 项目在本地部署时渲染良好 但是 当我将构建目录复制到 S3 存储桶进行部署时 它渲染得一团糟 有时它会起作用 但大多数时候它会呈现如下图所示 它在使用 AOR 的两种环境中都可以正常工作 环境 React admin版本 2 0
  • 在react-admin中拥有多个dataProvider的正确方法是怎样的?

    我试图在反应管理项目中使用多个数据提供程序 但出现错误 Warning Missing translation for key dataProvider is not a function function console anonymou
  • 在react-admin中访问redux store

    我的问题与反应管理 repo 我想在组件范围之外分派一个操作 以便做到这一点 我读过我需要访问实际的 redux 存储本身 并直接调度 所以我知道Admin组件有一个initialStateprop 但它只接受默认状态对象 而不接受存储 所
  • 表单提交失败后显示服务器端验证错误

    表单提交失败后如何显示验证消息 API 请求返回 HTTP 400 application problem json 响应 并包含违规行为作为带有字段路径的列表 https www rfc editor org rfc rfc7807 se
  • 嵌套参考字段

    为了检索设备类型 我使用一个将检索设备模型 然后使用另一个使用设备模型的字段 typeID 引用设备类型来检索设备类型 但它显示以下警告 警告 失败的道具类型 无效的道具翻译类型选择 提供给 ReferenceField 的布尔值 预期函数
  • 使用按钮调整简单的表单字段值

    首先 我对反应管理非常陌生 我有一个 SimpleForm 它通过 API 调用填充一堆字段
  • React Admin:如何传递状态进行转换

    我有一个用于创建媒体的组件 它首先将媒体上传到 S3 然后将返回的值放入组件的状态中 import Create ReferenceInput SelectInput SimpleForm TextInput from react admi
  • React Admin - 如何使用 abc/def 等嵌套路径调用 dataProvider

    React admin 的Resource组件图name端点的 prop 值 例如 访问数据 http example com abc your Resource组件看起来像这样
  • react-admin 中资源路由的自定义路径

    有没有办法指定资源的自定义路径 例子
  • React-admin 在创建视图提交后保留表单数据

    在反应管理中Create表单 有没有办法让用户在表单中输入的任何信息在用户单击后保留在屏幕上Save 我想重新使用他们输入的相同表单数据来创建另一条记录 Update 根据这个PR https github com marmelab rea
  • 对不是 的直接子级的输入显示选项卡表单验证

    当未聚焦的选项卡出现验证错误时 选项卡标题应显示为红色 相反 当未聚焦的选项卡出现验证错误时 选项卡标题不会给出任何错误指示 当我使用子组件时会发生此问题 如果所有组件都是在创建 编辑级别定义的 则该选项卡将按预期变为红色 但如果存在嵌套组
  • 在react-admin中自动完成带有两个字段的输入?

    我正在使用react admin创建一个网站 并使用以下代码创建一个包含id和描述的AutocompleteInput 以便您可以搜索两者并且它会过滤选项 const choices number 102 description Furni
  • 尝试导入错误:“ReactReduxContext”未从“react-redux”导出

    我正在尝试设置一个新的反应管理控制台 遵循官方教程 https marmelab com react admin Tutorial html https marmelab com react admin Tutorial html 目前re
  • 更新已编辑输入的值

    我在用react admin框架 我正在尝试动态更新我的输入值 在我的自定义组件中 我有onChange 方法如下所示 onChange value gt this setState currentForm this props recor
  • 用于静态管理的包装组件

    我想创建一个新组件 其中包含Inputs and Fields from aor并用在
  • 教程在 SaveContext 中抛出上下文未定义错误

    这可能是一个新手问题 但我正在使用react admin Tutorial html 当涉及到使用EditGuesser时 编辑 页面失败 报告 TypeError 上下文未定义 AFAIK 我已按照说明进行操作 在 添加创建和编辑功能 部
  • 将 Datagrid 组件与自定义查询结合使用 - react-admin

    将 Datagrid 组件与自定义查询一起使用时 收到以下错误 下面的代码适用于反应管理版本 3 3 1 但不适用于版本 3 8 1 类型错误 无法读取未定义的属性 包含 浏览器的控制台信息 列表组件必须在 内部使用 依赖 props 而不
  • 在react-admin中通过REST API进行基于cookie的身份验证

    我是反应管理新手 我已经阅读了 stackoverflow 中的所有问题 也用谷歌搜索了我的问题 但没有找到任何有用的解决方案 我正在设置 React admin 来替换我的一个项目的现有管理页面 我通过 REST API 使用基于 coo

随机推荐