Когда и как вызываются методы жизненного цикла React в процессе Next JS SSR? - PullRequest
1 голос
/ 30 января 2020

Это простой вопрос, на который почти наверняка есть ответ в документации JS где-то, но после поиска (а также поиска в Google какой-нибудь рецензии) я не могу его найти.

Как Я понимаю, что Next JS работает следующим образом:

  • Если вы приходите в свое приложение с «внешнего» URL-адреса, то есть не через Link, то страница SSR'd, и Next JS отправляет в браузер комбо HTML с JS (Next JS framework, React, et c). Это HTML создается через React на сервере.

  • Во время SSR getInitialProps вызывается на сервере и (я предполагаю) передает начальные данные вплоть до процесса SSR через props

  • Затем вызываются методы жизненного цикла React (componentDidMount / useEffect). Приложение по-прежнему имеет доступ к исходным данным через props. Насколько я понимаю, эти методы жизненного цикла вызываются на клиенте - это то, что говорит мне console.log - и, таким образом, вам может быть гарантирован доступ к таким вещам, как localStorage.

  • Но подразумевает ли это, что на стороне клиента второй рендер после исходного SSR, то есть исходный HTML доставленный заменен на спа?

  • Или исходное содержимое SSR остается, но Next JS каким-то образом вызывает методы жизненного цикла React "напрямую"?

Отчасти проблема в том, что я не знаю, как работает React внутри - как связаны рисование экрана и методы жизненного цикла между собой.

Я пытаюсь понять, как работает Next JS - что именно представляет собой поток, и как Next JS 'SSR и React работают вместе, и что происходит, когда и где.

Любая помощь высоко ценится!

1 Ответ

1 голос
/ 01 февраля 2020

Но означает ли это, что на стороне клиента после первоначального SSR выполняется второй рендеринг, т. Е. Исходный HTML заменяется на SPA?

То, что вы описываете, это то, что называется процессом «регидратации». Далее будет возвращено содержимое на стороне сервера, а затем повторно обработано на стороне клиента с помощью эффектов (например, useEffect) или выборки данных на стороне клиента (например, SWR ).

I рекомендую посмотреть это видео для более подробного объяснения от Тима, ведущего сопровождающего Next. js.

...