Поскольку мне нужен доступ к indexeddb в рендере реагирования, я использую обещание и разделяю логику в рендере.
render(){
if(original_flow) dispatch(applyUserAccFilters(groups));
//access indexeddb
else applyShopNameFilters(window,groups).then((
()=>{groupListItems=[];groupListItems.length=0;
//generate UI in groupListItems
//if I change groupListItems to be [], callback's called but empty UI is not rendered
dispatch(genGroupList(groups,groupListItems));
return this.paintUI(groupListItems);}),()=>{}
);
//original flow; this flow can work normally; render of this flow is normal
dispatch(genGroupList(groups,groupListItems));
return this.paintUI(groupListItems);
}
Поскольку я столкнулся с ситуацией, в которой реагировал, меня все равно попросили поместить return в нижнюю частьо рендере, я не могу не задаться вопросом, является ли какой-либо рендер в обратном вызове недопустимым в реакции?
Мне действительно нужно рендерить в обратном вызове разблокирующего IO;любые идеи приветствуются.