我试图让 Koa 同构渲染它从 react-router 接收到的 html 字符串。
这是我一直在努力工作的代码:
服务器.js
import koa from 'koa';
import React from "react";
import Router from "react-router";
import routes from "./routes";
const server = koa();
const port = process.env.NODE_ENV || 8000;
server.use(function *() {
try {
yield Router.run(routes, this.request.url, function (Handler) {
var content = React.renderToString(<Handler/>)
this.body = content
})
}
catch (err) {
this.status = err.status || 500;
this.body = err.message;
this.app.emit('error', err, this);
}
})
server.listen(port, function(err) {
if (err) throw err;
console.log("Server running on: http://localhost:"+port)
})
路由.js
import React from "react"
import {Route, DefaultRoute} from "react-router"
import Main from "./components/main"
export default (
<Route path="/">
<DefaultRoute handler={Main} name="main" />
</Route>
)
main.js
import React from "react"
const Main = React.createFactory(React.createClass ({
render () {
return (
<div>HELLO</div>
)
}
}))
export default Main
出现几个错误:
警告:Component(...):
render
在返回的组件实例上找不到方法:您可能忘记render
在组件中定义,或者您可能不小心尝试渲染类型不是 React 组件的函数的元素。警告:不要设置 React 元素的 props 属性。相反,在最初创建元素时指定正确的值。
TypeError:无法添加属性上下文,对象不可扩展
警告:有些东西直接调用了 React 组件。请改用工厂或 JSX。见:https ://fb.me/react-legacyfactory