React Admin, определите настраиваемую сагу для списка

Можно ли определить собственную сагу для компонента List? Я имею в виду, что когда список монтируется, он отправляет действие RA/CRUD_GET_LIST, которое автоматически (из-за свойств, переданных от родительских компонентов), извлекает данные с сервера. Я хочу определить свой собственный RA/CRUD_GET_LIST с другим поведением, возможно ли это?

Компонент списка:

<List
    {...this.sanitizeProps(this.props)}
    filter={{ userId: userId }}
    title="History"
    perPage={10}
>
    <DataGridComponent />
</List>

С sanitizeProps я фильтрую те реквизиты, которые мне нужны, и передаю остальные.

Ресурс, которого мне нужно дождаться: <Resource name="user" />

Я получаю userId от своего настраиваемого редуктора:

const mapStateToProps = state => ({
    userId: state.userReducer.user.id
});

person Paolo Guerra    schedule 25.06.2018    source источник
comment
Можете сначала объяснить свой вариант использования?   -  person Gildas Garcia    schedule 25.06.2018
comment
Я пытаюсь приостановить RA/CRUD_GET_LIST (HTTP-запрос) списка, пока конкретный <Resource /> не завершит выборку. Я попытался добавить собственную сагу, которая при отправке RA/CRUD_GET_LIST заставляет ждать FETCH_USER_SUCCESS. yield take(RA/CRUD_GET_LIST); но это не работает.   -  person Paolo Guerra    schedule 25.06.2018
comment
Почему вы ждете, пока ресурс завершит выборку? Я не понимаю   -  person Gildas Garcia    schedule 25.06.2018
comment
Я имею в виду, что вы все еще описываете решение, которое попробовали, а не свой вариант использования.   -  person Gildas Garcia    schedule 25.06.2018
comment
Извините, мне нужно дождаться получения User Resource, потому что в компоненте List у меня есть filter с id из user. При обновлении страницы список отправит запрос с пустым фильтром (выборка пользователя не завершена), что приведет к 403.   -  person Paolo Guerra    schedule 25.06.2018
comment
Не могли бы вы поделиться кодом компонента List?   -  person Gildas Garcia    schedule 25.06.2018
comment
Конечно, редактировал вопрос   -  person Paolo Guerra    schedule 26.06.2018
comment
Не вижу, как вы получаете userId в своем отрывке. Вы можете добавить и эту часть?   -  person Gildas Garcia    schedule 26.06.2018
comment
Вопрос обновлен; Я получаю userId от специального редуктора. Я вызываю собственное fetchUser() действие, когда монтируется основной компонент. Мне нужно дождаться завершения этого действия, прежде чем компонент List отправит свое действие.   -  person Paolo Guerra    schedule 26.06.2018


Ответы (1)


Чтобы ответить на ваш вопрос, нет, это невозможно. Однако вы можете достичь желаемого результата, заключив свой список в подключенный компонент, и только он будет отображать List, когда у вас есть user_id. В противном случае просто верните null или что-то еще, указывающее, что вы загружаете материал.

const MyConnectedList = ({ userId, ...props }) =>
    userId
    ? (
       <List
           {...this.props}
           filter={{ userId }}
           title="History"
           perPage={10}
       >
           <DataGridComponent />
       </List>
    )
    : null
person Gildas Garcia    schedule 27.06.2018