Какой смысл извлекать удаленные данные в методе componentDidMount, если это приведет к изменению того, что показано пользователю? - PullRequest
1 голос
/ 26 сентября 2019

Я провел два часа, читая SO и другие статьи, и у меня все еще есть вопросы.Я хотел бы лучше понять вещи и заверить их в правильности моего понимания.

Все началось с изучения хуков и размышлений о разнице между useEffect и useLayoutEffect.Я узнал, что useEffect следует использовать, когда то, что не влияет на то, что показано пользователю (некоторая фоновая работа), и useLayoutEffect запускается «синхронно перед рисованием» - так, например, его следует использовать, когда яхотите показать список на экране и данные для него извлекаются из другого места.Таким образом, если я получу данные в useLayoutEffect, он сначала получит данные, и только после этого состояния обновления, и покажет экран с этими данными пользователю.Если бы я использовал useEffect, он сначала показал бы пользователю пустой список (потому что он асинхронный и не останавливал рисование), а затем перекрасил его после получения данных.Смущает то, что в нем говорится, что useLayoutEffect, так же как и useEffect, вызывается после завершения рендеринга.Я объясняю, почему это не имеет никакого смысла для меня в последнем абзаце.

Еще одна запутанная вещь заключается в том, что в нем говорится, что useEffect следует использовать в том же месте, где методы cDM или cDUназываются.Но я получаю данные в методе cDM с тех пор, как начал использовать реакцию.Значит ли это, что я все время делал неправильно?Потому что я должен был сделать это там, где уволен useLayoutEffect.И это подводит меня к следующему абзацу.

Самая запутанная вещь - связь между рендерингом, рисованием и cDM методом.Он говорит, что cDM вызывается после окончания рендеринга.В нем также говорится, что «рендеринг завершен» означает, что DOM, макет, размеры, стили - все рассчитано и готово для рисования браузером.Я понимаю это таким образом, что на данный момент нет смысла делать что-либо, что изменило бы то, что показано пользователю - потому что все это уже рассчитано!Разве не должно быть хука, который вызывается перед рендерингом?Например, я вызываю этот хук, чтобы получить данные для некоторого списка, который отображается на экране.Только после того, как данные извлечены, рендеринг должен произойти, потому что теперь ответ знает, сколько элементов в списке и сколько места он займет и так далее.Я имею в виду, какой смысл делать рендеринг, прежде чем вы узнаете все свои данные?Не заставляет ли реакция пересчитать все после получения данных?

Я действительно надеюсь, что вы поможете мне понять эти вещи.Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...