React restClient admin-on-rest

admin-on-rest позволяет использовать любой ответ JSON, создавая собственные клиенты для отдыха. Примеры в документации предназначены для использования JSON из проекта json-server, что является простым.

Мне было интересно, насколько легко использовать это API в admin-on-rest с незначительными меняется на restClient.


person Chida    schedule 10.10.2016    source источник
comment
Кажется, ваши ссылки ведут на страницу с ошибкой   -  person Ricardo Memoria    schedule 13.10.2016
comment
Да даже у меня ссылка не работает. Удалите ссылки, которые вы разместили в вопросе   -  person Veeresh123    schedule 13.10.2016
comment
Они выпустили версию 0.4.0 с обновленной документацией. Я обновил ссылки и исправил синтаксические проблемы с отображением ссылок.   -  person Chida    schedule 13.10.2016


Ответы (2)


Хорошо - давайте посмотрим на исходники администратора на отдыхе (файл 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};
    });
}

Итак, мы просто перезаписали объект json коллекцией из «результатов» в вашей схеме в этой строке:
json = json['results'] ? json['results'] : json;
Теперь вы можете использовать этот клиент в Admin

<Admin restClient={restClient}>
...
</Admin>

ПРЕДУПРЕЖДЕНИЕ!!! Это повлияет на ВСЕ запросы администратора. Но вы можете добавить дополнительный параметр. Если вы не хотите использовать json = json['results'] ? json['results'] : json;, вы можете добавить дополнительный параметр или проверить выборку метода.

person Muritiku    schedule 23.11.2017

если я не ошибаюсь, вы хотите переписать URL из (например): https://marmelab.com/admin-on-rest-demo/#/customers/684 КОМУ: https://marmelab.com/admin-on-rest-demo/?customers=684

вы можете переписать GET_ONE в restClient.js: case GET_ONE: url = ${apiUrl}/${resource}/${params.id}; TO: case GET_ONE: url = ${apiUrl}/?${resource}=${params.id};

Это приведет к получению записи через параметр вместо части URL.

person user1907019    schedule 29.07.2017