Администратор React выдает «не удается преобразовать неопределенное в объект» в пользовательском dataprovider

#javascript #reactjs #typescript #react-admin

#javascript #reactjs #typescript #react-admin

Вопрос:

Использование пользовательского dataprovider, доступного из руководств, где я также добавил пользовательский запрос данных, который мы можем назвать «fetchData», который просто запрашивает данные у определенной конечной точки.
Он работает с интерфейсом администратора по умолчанию, но не работает с указанной ошибкой в пользовательском интерфейсе администратора.

Подробнее:

 TypeError: can't convert undefined to object

isDataProviderOptions
node_modules/ra-core/esm/dataProvider/getDataProviderCallArguments.js:19

  16 | ];
  17 | var isDataProviderOptions = function (value) {
  18 |     var options = value;
> 19 |     return Object.keys(options).some(function (key) { return OptionsProperties.includes(key); });
  20 | };
  21 | // As all dataProvider methods do not have the same signature, we must differentiate
  22 | // standard methods which have the (resource, params, options) signature
  

Я думаю, для этого требуются некоторые «параметры». И я пока безуспешно пытался добавить их из приведенных примеров dataprovider с открытым исходным кодом.

Как и ожидалось, значение параметров равно «неопределенному».

Код моего dataprovider: https://pastebin.com/VMrhdSTB
Но имейте в виду — это из учебника с небольшими изменениями.

Как мне использовать этот dataprovider:

 import { number } from 'prop-types';
import * as React from 'react';
import { useEffect, useState } from 'react';
import { AdminContext, AdminUI, Resource, ListGuesser, useDataProvider } from 'react-admin';

import DataProvider from './dataprovider';

function App() {
    return (
        <AdminContext dataProvider={DataProvider}>
            <AsyncResources />
        </AdminContext>
    );
}

function AsyncResources() {
    const [state, setState] = useState({
      stations_info: {
        data: [
          {
            id: number,
            ip: "",
            name: "",
            port: number
          }
        ],
        total: number
      }
    });
    const dataProvider = useDataProvider();

    useEffect(() => {
        dataProvider.fetchStations().then(
          stations_info => {
            setState(
                state => ({...state, stations_info })
            )
        }
        
        )}, []);

    const StationResources = () => {
      const { data, total } = state.stations_info;
 
      let render_items = []
  
      for (var item of data) {
          render_items.push(<Resource
            name={item.name}
            key={item.key}
            list={ListGuesser}
          />)
      }
  
      return (
              <div>
                  {render_items.map(item => item)}
              </div>
      )
    }

    return (
        <AdminUI>
            { StationResources }
        </AdminUI>
    );
}

export default App;
  

Комментарии:

1. Вы проверили значение параметров в консоли, зарегистрировав его? Если да, был ли это объект?

2. Пожалуйста, укажите дополнительную информацию

3. @Darkshadow Да, я пробовал это. Безуспешно.

4. @UKS Какую информацию вы хотите? Возможно, мне просто нужно поделиться с вами кодом dataprovider, и все.

5. Вы можете включить это в вопрос. А также каково значение консоли options внутри этого метода?

Ответ №1:

Это известная ошибка в react-admin 3.10.0, которая уже исправлена в master. Исправление будет выпущено в версии 3.10.1 (запланировано на сегодня).

https://github.com/marmelab/react-admin/pull/5524