【问题标题】:React v15.0.0: Since that renderToString is deprecated, how to go about server-side rendering?React v15.0.0:由于不推荐使用 renderToString,如何进行服务器端渲染?
【发布时间】:2016-03-27 19:09:49
【问题描述】:

React 有一个新的候选版本,v 15.0.0。由于现在库中不推荐使用 renderToString 方法,并且显然将在未来的版本中停止使用,那么在新版本中使用 React 支持服务器端渲染的方式是什么?

在文档页面上,除了不再支持此特定方法之外,没有提供 renderToString 的替换或其他解释。

谢谢

【问题讨论】:

  • renderToString 已在 0.14 中弃用,但仅给出警告。这个功能现在只存在于 ReactDOMServer 中:facebook.github.io/react/docs/top-level-api.html#reactdomserver
  • 所以,ReactDOMServer 仍然有效。我很困惑,并认为他们完全取消了它。
  • 是的,它们只是将事物彼此分开。目标是 React 核心是通用的,不知道我们作为开发人员希望它呈现什么,无论是 DOM、标记字符串还是 iOS 元素等等。所以将这些东西捆绑在其他包中是有意义的。

标签: javascript node.js reactjs version server-side-rendering


【解决方案1】:

如 cmets 中所述,使用最新版本的 React 呈现字符串的正确(也是唯一)方法是使用 ReactDOMServer 的 renderToString。但是,许多现有的答案和文档都引用了已删除的 React.renderToString。它已经被弃用了一段时间,但显然最近才被删除。

这可能是什么样子的一个快速而肮脏的例子(使用 node-babel 运行):

const Express = require('express')
const React = require('react')
const ReactDomServer = require('react-dom/server')

const Label = React.createClass({
  render: function () {
    return <p> Foo! </p>
  }
})

const server = Express()

server.use(function(req, res) {
  const appHtml = ReactDomServer.renderToString(<Label />)
  res.send(appHtml)
})

server.listen(3000)

【讨论】:

    猜你喜欢
    • 2020-06-29
    • 2016-08-06
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2016-05-09
    • 2016-06-26
    • 2017-08-13
    相关资源
    最近更新 更多