У нас есть проблема, при которой мы видим полную повторную визуализацию нашего редактирования и отображаем просмотры после того, как из магазина поступает больше данных. Мы используем 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;
}