React restClient admin-on-rest

时间:2016-10-10 18:03:56

标签: json rest reactjs admin-on-rest

admin-on-rest允许通过编写自定义休息客户端来消费任何JSON响应。文档中的示例用于从json-server project中使用JSON,这很简单。

我想知道在this api进行细微更改时,在休息时使用restClient是多么容易。

2 个答案:

答案 0 :(得分:0)

好的 - 让我们看看休息时管理员的来源(文件admin-on-rest / src / util / fetch.js)我们对fetchJson方法感兴趣。

该方法返回获取承诺,其中它尝试​​解析该代码中的json:

try {
  json = JSON.parse(body);
} catch (e) {
  // not json, no big deal
}

然后它返回:return { status, headers, body, json };
但是我们在结果中有正文并且可以重用它,或者我们可以在json中使用解析对象

对于您的示例,我们可能会这样做(错过了一些代码):

const httpClient = (url, options = {}) => {
    if (!options.headers) {
        options.headers = new Headers({ Accept: 'application/json' });
    }
    options.withCredentials = true;
        return fetchUtils.fetchJson(url, options).then(({status, headers, body, json}) => {
        json = json['results'] ? json['results'] : json;
        return {status, headers, body, json};
    });
}

所以我们只是通过集合中的'results'来收集json对象: json = json['results'] ? json['results'] : json;
现在您可以在Admin

中使用该客户端
<Admin restClient={restClient}>
...
</Admin>

警告!!!这将影响Admin的所有请求。但您可以添加其他参数。如果您不想使用json = json['results'] ? json['results'] : json;,可以添加其他参数或检入方法提取

答案 1 :(得分:-1)

如果我没有记错的话,你想从(作为例子)重写url: https://marmelab.com/admin-on-rest-demo/#/customers/684 至: https://marmelab.com/admin-on-rest-demo/?customers=684

你可以在restClient.js中重写GET_ONE:    案例GET_ONE:        url = ${apiUrl}/${resource}/${params.id};     至:   案例GET_ONE:             url = ${apiUrl}/?${resource}=${params.id};

这将通过参数而不是网址部分来修改记录。