Действие crudGetList не удаляет данные о состоянии, отсутствующие в ответе - PullRequest
0 голосов
/ 04 февраля 2019

ПРЕДУПРЕЖДЕНИЕ. Этот вопрос относится к фреймворку реагирования-администрирования

Я пытаюсь сделать руководство по приложению, которое использует данные с сервера для загрузки страниц содержимого.Для этого я делаю пользовательскую страницу, которая выбирает справочные страницы на componentDidMount.В этой функции я вызываю реагировать-admin crudGetList ( resourceName , pagination , sortingById , filters ) , гдефильтры это {and:[{condition},{language: currentLanguage}]}, так как я хочу иметь руководство на разных языках.Я заметил, что наличие страниц на разных языках в базе данных и использование действия crudGetList с фильтрами выбирает правильные экземпляры, однако состояние сохраняет старые данные.Например, если я сначала получу данные на английском языке, поменяю язык и вернусь к странице справочника, в состоянии избыточности будут страницы для обоих языков вместо текущего выбранного.

Это ожидаемое поведение?Создание нового запроса для страниц справочника не должно заменить данные редуцированного состояния данными, поступающими из запроса?Если не ожидается, я должен открыть вопрос?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

React-admin использует шаблон под названием оптимистичный рендеринг .Это означает, что если приложение извлекло некоторые объекты в прошлом, если ему нужно отобразить эти объекты, оно сначала показывает устаревшие объекты, затем выбирает серверную часть и, если ответ отличается, повторно отображает экран с последними данными.

Например, когда пользователь выбирает список сообщений, response-admin сохраняет эти сообщения в словаре, проиндексированном по id:

{
   123: { id: 123, title: "hello" },
   456: { id: 456, title: "world" },
   ...
}

React-admin также сохраняет список идентификаторов.что список должен отображать:

[123, 456, ...]

Используя эти два свойства, Reaction-Admin теперь может отображать список.Но он также может отображать детали поста без предварительного попадания на сервер.Поэтому, когда пользователь нажимает на элемент в списке ,act-admin использует данные из первой структуры, чтобы отобразить их сразу, не дожидаясь ответа сервера.

Цель оптимистического рендеринга - производительность:пользователь не должен ждать двусторонней передачи с сервером, интерфейс очень быстрый.

В вашем конкретном случае я понимаю, что это может вызвать проблемы, поскольку хранилище содержит устаревшие данные, которые не являютсяна желаемом языке.Я предлагаю вам создать пользовательскую сагу, которая реагирует на действие по изменению языка и очищает хранилище, чтобы избежать подобных проблем.

Проверьте документацию для пользовательских саг на сайтеact-admin:

https://marmelab.com/react-admin/Admin.html#customsagas

0 голосов
/ 04 февраля 2019

Вы должны настроить, как хранилище приставок реагирует на новые входящие данные.

В частности, для этого и нужен «редуктор»;ваше «действие» (в вашем случае crudGetList) подает данные в «редуктор», который представляет собой просто функцию с инструкциями для хранилища о том, как он должен корректировать свою форму на основе новых данных.

Где-то в вашем приложении, вероятно, есть редуктор, который реагирует на ваши действия по извлечению, но он настроен так, чтобы просто помещать новые результаты вместе со старыми, а не заменять их.Однако это очень трудно понять, не видя кода, описывающего весь «цикл» редуксов.

Документы по редуксу превосходны.Я бы начал с этого и убедился, что вы хорошо понимаете, весь ли поток данных проходит через редукс, а затем отправляйтесь на поиски этого редуктора.

https://redux.js.org/basics/reducers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...