Изменить и отобразить повторный рендеринг представлений после того, как getOne вернет больше данных - PullRequest
0 голосов
/ 16 июня 2020

У нас есть проблема, при которой мы видим полную повторную визуализацию нашего редактирования и отображаем просмотры после того, как из магазина поступает больше данных. Мы используем react-admin для отображения групп и их участников. В виде списка нам нужно показать только минимальные данные о каждой группе. Поскольку наш бэкэнд медленно загружает все данные участников, мы сделали этот подзапрос только тогда, когда событие getOne приходит к нашему клиенту отдыха. Поэтому, когда пользователь щелкает элемент в представлении списка, RA отображает представление редактирования с записью, которую он уже имеет (которая не содержит дополнительных данных о пользователях, таких как имена и роли. Как только событие getOne возвращается, все представление повторно -renders и раздражающее мигание и сброс форм. работает нормально, undoable = {false}, похоже, решает эту проблему в более старой основной версии. Сейчас мы находимся в процессе перехода на новейшую основную версию RA, и это, похоже, происходит снова.
Есть идеи, что мы можем сделать, чтобы этого избежать?

Если это поможет, вот как выглядит наш код getOne в restClient:

getOne: (resource, params)=>{
let promise = new Promise((resolve,reject)=>{
    baseClient.getOne(resource,params).then( response => {
        let groupObj = response.data;

        groupObj.finishedLoading = false;

        //if we can't view this then don't even try to get sub-resources
        if(groupObj.viewable === false){
            return resolve(response);
        }

        //sub-requests to get extra data about the group

        let promises = [];
        //get members' data
        promises.push(baseClient.getOne('members',{id: groupObj.id, basePath: '/members'})
            .then(function(membersResponse){
                groupObj.users = membersResponse.data;
            }));
        //compute all the valid possible parents of the group
        promises.push(baseClient.getOne('getValidParents',{id: groupObj.id, basePath: '/getValidParents'})
            .then(function(contentsResponse){
                groupObj.validParents = contentsResponse.data;
            }));

        Promise.all(promises).then(function(){
            groupObj.finishedLoading = true;
            resolve(response);
        }).catch(e => reject(e));
    }).catch(e => reject(e));
});
return promise;

}

...