2014-07-15 47 views
1

我在寻找的时候,我的项目是一个共享的主机上的一个简单的解决一个静态的标记,它没有安装和的NodeJS我想用react js(搜索引擎友好)。产生与reactjs

我自己想出了一个解决方案:生成一个静态标记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')获得模拟。

我可以猜到,这是一个坏主意,但为什么呢?

如果它不是那么愚蠢这确实给我任何的性能提升?

回答

0

这似乎容易受到XSS(跨站脚本)。一般来说,通过连接字符串来生成JS或任何代码是不好的想法,因为你失去了解释器/编译器/ linter /等提供的预运行时的安全和错误处理。

例如,在这里你将无法调试您的组件以任何有意义的方式,除了你的“犯错”的回调。

此外,当您添加越来越多的代码这种模式很快就会变得笨拙。