我只使用Meteor 1.4开发了一段时间,现在跳到了1.6。事情确实发生了变化(情况更糟)。
流星过去很容易上手。现在一切都乱七八糟。似乎每个软件包都希望在开始时插入自己,这样您就不能再导入它并再使用它,您必须更改应用程序的设置/样板才能使其正常工作。这也意味着官方文档没用,因为它无法解释您想要使用的每个软件包。
无论如何,我想开始使用react-router
和server-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世界里发生了什么。