Зачем мне дважды делать renderToString для реагирования на рендеринг на стороне сервера? - PullRequest
0 голосов
/ 28 сентября 2018

Мой текущий серверный узел на стороне сервера использует настройку, очень похожую на пример с реал-сагой redux-saga.

Он дважды использует renderToString, что отличается от другого примера.

Реальный server.js

 const rootComp = <Root store={store} routes={routes} history={createMemoryHistory()} renderProps={renderProps} type="server"/>


  store.runSaga(rootSaga).toPromise().then(() => {
    console.log('sagas complete')
    res.status(200).send(
      layout(
        renderToString(rootComp),
        JSON.stringify(store.getState())
      )
    )
  }).catch((e) => {
    console.log(e.message)
    res.status(500).send(e.message)
  })

  renderToString(rootComp)
  store.close()

Другой пример просто использует renderToString один раз.Не могли бы вы, ребята, объяснить, почему для этого нужно сделать renderToString дважды с redux-saga ??

1 Ответ

0 голосов
/ 22 октября 2018

Первый вызов (тот, что внизу) отобразит ваше приложение.Он будет отправлять все действия ваших компонентов, а затем использовать Saga для извлечения / хранения данных.

Затем вы вызываете store.close (), который остановит Saga, чтобы выполнить больше действий (если вы не останавливаете Saga, этобуду ждать вечно из-за времени (истинного) саги).

Второй вызов (внутри обещания) отобразит ваше приложение с данными, которые хранятся в вашем магазине.Saga больше не будет обрабатывать действия, так как вы остановили его.

Есть примеры только с одним "renderToString", потому что.Выберите один:

  • нет данных для загрузки, поэтому нет необходимости визуализировать дважды
  • данные загружаются другим способом
...