Вы можете изменить состояние, а затем выполнить вычисления в обратном вызове setState . В соответствии с документацией React это «гарантировано срабатывает после того, как обновление было применено».
Это должно быть сделано в componentDidMount
или где-то еще в коде (например, в обработчике событий изменения размера) чем в конструкторе.
Это хорошая альтернатива window.requestAnimationFrame
, и у него нет проблем, которые некоторые пользователи упомянули здесь (необходимо объединить его с setTimeout
или вызвать его несколько раз). Например:
class AppBase extends React.Component {
state = {
showInProcess: false,
size: null
};
componentDidMount() {
this.setState({ showInProcess: true }, () => {
this.setState({
showInProcess: false,
size: this.calculateSize()
});
});
}
render() {
const appStyle = this.state.showInProcess ? { visibility: 'hidden' } : null;
return (
...
...
);
}
}
Спасибо Martin R за ваш комментарий, он привел меня к решению, которое сработало для меня. Я закончил с этим решением. Это не совсем то, что я хотел, но, зная, что в массиве ids редко будет больше 10 записей, он будет делать это сейчас, так как по крайней мере решает проблему с памятью. Надеемся, что Swift и Core Data обеспечат лучшее решение в будущем.
var predicates = [NSPredicate]()
for id in idList
{
predicates.append(NSPredicate(format: "temporaryId LIKE[c] %@", id))
}
fetchRequest.predicate = NSCompoundPredicate(orPredicateWithSubpredicates: predicates)