Почему componentWillMount может вызываться несколько раз с React Fiber? - PullRequest
0 голосов
/ 01 ноября 2018

Я прочитал несколько источников сейчас, что с react Fiber (асинхронный рендеринг) componentWillMount() может вызываться несколько раз.

Почему это случилось?

1 Ответ

0 голосов
/ 01 ноября 2018

Fiber предназначен для поддержки высокоприоритетных и низкоприоритетных обновлений. Например, анимации являются обновлениями с высоким приоритетом (поскольку легко заметить скачкообразность анимации со скоростью 60 кадров в секунду), в то время как изменение вызова API будет иметь низкий приоритет (кто собирается заметить дополнительные сто миллисекунд на то, что вам нужно ждать секунда за что?).

Итак, простой пример со стандартным вызовом componentWillMount выглядит следующим образом: мы выполняем обновление с низким приоритетом, и посредник начинает прокладывать себе путь через дерево компонентов, вызывая для них componentWillMount, а также выполняет другую согласование. Работа. Не успев вовремя, он останавливается, чтобы возобновить цикл событий. Там нет высокоприоритетных вещей, поэтому при следующем обратном вызове в режиме ожидания он выбирает, где остановился, завершает сверку и фиксирует обновление. Нет дополнительных компонентовWillMounts.

Следующий пример: обновление с низким приоритетом запускается, и, как и прежде, согласователь работает через дерево, вызывая для них componentWillMount. Как и прежде, он приостанавливает выполнение, но на этот раз приходит обновление с высоким приоритетом. Поэтому, когда возобновление согласования возобновляется, программа реагирует на обновление с высоким приоритетом. Он согласовывает это обновление и фиксирует его. Теперь можно возобновить обновление с низким приоритетом, но уже выполненную работу необходимо отбросить, поскольку обновление с высоким приоритетом могло внести изменения, влияющие на то, что будет рассчитывать обновление с низким приоритетом. Поскольку он должен начинаться заново, он должен будет снова выполнить эти вызовы для componentWillUpdate.

...