在使用 swig 和 Koa 进行服务器端渲染时将道具传输到客户端
Transferring props to client side while doing server side rendering using swig and Koa
这是我的 server.js
router.get('/react/:regioncode', function*(next) {
var response =
yield fnGetOffers(this.params.regioncode);
var JsonResponse = JSON.parse(response);
var offerHtml = ReactDOM.renderToString(ReactApp({
offerAPI: JsonResponse
}));
this.body =
yield render('index', {
reactoffers: offerHtml,
offerAPI : JsonResponse
});
});
服务器端呈现正常,但要附加事件处理程序,我也需要在客户端加载数据。我想在客户端使用相同的 JSON 数据,为此我这样做 :
var mountNode = document.getElementById('react-content');
ReactDOM.render( < ReactApp offerAPI = {
offerAPI
}
/>, mountnode);
问题是我无法在我的客户端 js 中获取 offerAPI 数据,而且我的事件处理程序也没有附加。
通常在对 React(或任何其他依赖服务器端渲染的 JavaScript)进行初始数据处理时,您会将内容放在附加到 window
对象的变量中。
<html>
<body>
<script>
window.offerAPI = {{{ offerAPI }}};
</script>
</body>
</html>
React 可以这样拾取:
var mountNode = document.getElementById('react-content');
ReactDOM.render( < ReactApp offerAPI = {
window.offerAPI
}
/>, mountnode);
这当然会在获取数据后被清除,以免它在 DOM 中无用地乱七八糟。
这是我的 server.js
router.get('/react/:regioncode', function*(next) {
var response =
yield fnGetOffers(this.params.regioncode);
var JsonResponse = JSON.parse(response);
var offerHtml = ReactDOM.renderToString(ReactApp({
offerAPI: JsonResponse
}));
this.body =
yield render('index', {
reactoffers: offerHtml,
offerAPI : JsonResponse
});
});
服务器端呈现正常,但要附加事件处理程序,我也需要在客户端加载数据。我想在客户端使用相同的 JSON 数据,为此我这样做 :
var mountNode = document.getElementById('react-content');
ReactDOM.render( < ReactApp offerAPI = {
offerAPI
}
/>, mountnode);
问题是我无法在我的客户端 js 中获取 offerAPI 数据,而且我的事件处理程序也没有附加。
通常在对 React(或任何其他依赖服务器端渲染的 JavaScript)进行初始数据处理时,您会将内容放在附加到 window
对象的变量中。
<html>
<body>
<script>
window.offerAPI = {{{ offerAPI }}};
</script>
</body>
</html>
React 可以这样拾取:
var mountNode = document.getElementById('react-content');
ReactDOM.render( < ReactApp offerAPI = {
window.offerAPI
}
/>, mountnode);
这当然会在获取数据后被清除,以免它在 DOM 中无用地乱七八糟。