使用reactjs生成静态标记

时间:2014-07-15 09:54:40

标签: javascript laravel reactjs

我正在寻找一个简单的解决方案,当我的项目在共享主机上时,它没有安装nodejs,我想使用react js(seo friendly)。

我自己想出了一个解决方案:在开发时使用nodeJs生成静态标记并使用laravel blade语法,这样我就可以从数据库中获取数据。

var require = require('react');
var fs = require('fs');
var Welcome = require('./react/welcome.js');

var path = __filename.split('\/');
// rendering the component to string
// passing `props` with blade syntax
var reactComponent = React.renderComponentToString(Welcome( {name:"{{$name}}"} ));

// get the name of `jsx` file
filename = path[path.length - 1].split('.')[0];

// rendering the component on the client side
reactComponent += '<script>' +
    "React.renderComponent(Welcome({name:'{{$name}}'}),     document.getElementById('welcome'));"+
    '</script>';

fs.writeFile('app/views/react/'+filename+'.blade.php', 
    reactComponent, 
    function (err) {
        if(err) throw err;
        console.log('All down!');
    }
);

从这里开始我只需创建一个master模板并使用@include('react.welcome')来获取模拟效果。

我猜这是个坏主意,但为什么呢?

如果不是那么愚蠢,这会给我带来任何性能提升吗?

1 个答案:

答案 0 :(得分:0)

这似乎容易受到XSS(跨站脚本)的攻击。通常,通过连接字符串生成JS或任何代码是个坏主意,因为你失去了解释器/编译器/ linter /等提供运行前的安全性和错误处理。

例如,除了你的“错误”之外,你将无法以任何有意义的方式调试你的组件。回调。

此外,随着您添加越来越多的代码,此模式将很快变得难以处理。

相关问题