带有服务器渲染和反应路由器的流星设置(样板)?

时间:2018-02-16 15:29:15

标签: javascript reactjs meteor

我只使用Meteor 1.4开发了一段时间,现在跳到了1.6。事情确实发生了变化(情况更糟)。

流星过去很容易上手。现在一切都乱七八糟。似乎每个软件包都希望在开始时插入自己,这样您就不能再导入它并再使用它,您必须更改应用程序的设置/样板才能使其正常工作。这也意味着官方文档没用,因为它无法解释您想要使用的每个软件包。

无论如何,我想开始使用react-routerserver-render,这也需要react-helmet(我认为)。所有这些对我来说都是新的,嘿,他们想立即插入自己,他们都有可怕的文档开始。

这是我迄今为止基于谷歌搜索的内容:

lib/main.js

import React from 'react'

import { Helmet } from 'react-helmet'

import App from '../imports/ui/App.js'

if (Meteor.isClient) {
  import { hydrate } from 'react-dom'

  hydrate(<App />, document.getElementById('app'))
}

else {
  import { renderToString } from 'react-dom/server'
  import { onPageLoad } from 'meteor/server-render'
  import NodeCache from 'node-cache'

  const renderCache = new NodeCache({stdTTL: 432000})

  onPageLoad((sink) => {
    const path = sink.request.url.path
    let htmlString = renderCache.get(path)
    if (!htmlString) {
      htmlString = renderToString(<App location={path} />)
      const helmet = Helmet.renderStatic()

      renderCache.set(path, htmlString)
      renderCache.set(path + "_title", helmet.title.toString())
      renderCache.set(path + "_meta", helmet.meta.toString())
      renderCache.set(path + "_link", helmet.link.toString())
    }

    sink.appendToHead(renderCache.get(path + "_title"))
    sink.appendToHead(renderCache.get(path + "_meta"))
    sink.appendToHead(renderCache.get(path + "_link"))
    sink.renderIntoElementById("app", htmlString);
  })

}

然后App.js现在只是一个空组件。

我不知道在哪里放置我的路由,或者如何(由于某种原因,文档假定您已经知道)。我认为它还需要在客户端的hydrate()方法中插入自己,但我从中得到它的例子并没有这样做,所以我真的不知道。

我不知道是将main.html放在客户端上,还是放在客户端和服务器上。

我不知道如何设置标题和元标记以及每条路线的内容。(我认为这实际上会出现在react-helmet的文档中,因为那个&#39所有它应该做但不是......)

任何人都可以帮我完成这个样板的其余部分吗?我不知道Meteor世界里发生了什么。

0 个答案:

没有答案