Можете ли вы принудительно обновить состояние React?Javascript

Форум по Javascript
Ответить
Anonymous
 Можете ли вы принудительно обновить состояние React?

Сообщение Anonymous »

У меня есть проект React и, короче говоря, у меня есть селектор, который выбирает проекты. Когда проект выбран, он должен быть установлен как выбранный и должен начать загрузку своей версии Revit в фоновом режиме (что может быть относительно длительным процессом). Однако я сначала отправляю выбор, а затем запускаю асинхронную загрузку. Однако когда загрузка завершается, старый выбор все равно отображается. Вот моя функция-обработчик для изменения селектора проекта:

Код: Выделить всё

  dispatch({
type: TaskEditActions.selectedProjectDestination,
payload: p
});
console.log(p?.Id, state.selectedProjectDestination?.Id);
if (p != null && state.Task?.CompositeExtractType === CompositeExtractType.ReSaveCloudModel) {
LoadRevitVersion(p, false, true)
.catch(error => onError(error, 'Get Destination Revit Version'));
}
В коде LoadRevitVersion он выполняет загрузку, а затем использует console.log(state.selectedProjectDestination?.Id), чтобы показать мне идентификатор целевого проекта, когда он достигнет этой точки (около 15 секунд в моей макетной настройке). Поэтому, когда вы выберете новый проект, он запустит счетчик и зарегистрирует идентификаторы существующего проекта и нового (которые различаются, что вполне ожидаемо на тот момент, поскольку я только что отправил его). Однако он будет вращаться и загружаться в течение 15 секунд, а затем идентификатор ВСЕ ЕЩЕ старый при входе в метод LoadRevitVersion. Я знаю, что обновления состояния являются асинхронными, но кажется, что они будут обновляться в течение этих 15 секунд загрузки, пока я ничего не делаю... Я также пытался выполнить 1-секундное обещание, а затем вызвать метод, чтобы посмотреть, позволит ли это обновить React, но тот же результат.
Итак, есть ли способ заставить его обновить состояние? Или мне здесь чего-то не хватает?
Чтобы добавить некоторый контекст, поскольку загрузка занимает много времени, возможно, что пользователь выберет другой проект во время его загрузки, поэтому мне нужно посмотреть, что представляет собой выбранный проект, когда загрузка версии завершится...

Подробнее здесь: https://stackoverflow.com/questions/798 ... ate-update
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»