我写了一个React图片库或幻灯片。我需要通过搜索引擎使alt文本可索引,但由于我的服务器是PHP,React.renderToString的用途有限。
服务器是PHP + MySQL。 PHP使用Smarty(一个不错的PHP模板引擎)来呈现HTML。 PHP框架的其余部分是我自己的。 Smarty模板有这个单一的笨拙线:
<script>
var GalleryData = {$gallery};
</script>
由PHP的控制器函数呈现如下:
return array(
'gallery' => json_encode($gallery),
);
($gallery
是MySQL查询的结果表)。
我的.js:
React.render(<Gallery gallery={GalleryData} />, $('.gallery').get(0));
不是最优雅的设置,但鉴于我的服务器是在PHP中,似乎没有更好的方法(?)
我在第一次拍摄时做了一个非常快速的修复 - 我从Firebug复制了渲染的HTML,然后手动将其插入到DB中的新表中。然后我简单地从PHP渲染这一代码,我们很高兴能够使用浏览器。
有一个复杂因素是,因为React组件只是在它们首次渲染时插入到DOM中(据我所知),并且因为库一次只显示一个图像幻灯片,所以我不得不手动点击在保存HTML代码之前,通过所有幻灯片。
现在,替代文字可由CMS编辑,因此我需要自动化此过程,或者提出更好的解决方案。
在Node.js中重写服务器是不可能的。
我的第一个猜测是我需要安装Node,并编写一个创建相同React组件的脚本。因为输入数据(包括alt文本)必须来自MySQL,所以我有几个选择:
然后我必须确保所有组件都被渲染到DOM中,因此我可以通过手动调用nextSlide()方法来编写脚本(就像幻灯片一样少)。
最后,我将再次将渲染的DOM保存到DB中(因此Node脚本毕竟需要MySQL连接 - 也许第一个选项是最好的。)
对于这样的基本要求,整个过程似乎非常复杂。我错过了什么吗?
我对Node完全不熟悉,在浏览器之外构建DOM的整个想法对我来说基本上是新的。我不介意将Node引入我的架构,但它只是支持在前端使用React。
请注意,该网站每月有大约15,000次综合浏览量,因此无需考虑大规模的可扩展性 - 我不使用任何页面缓存,因为此流量不需要它。
我可能有一些需要像这样静态呈现的React组件,但是保持较小的技术开销(例如在Node中维护一组并行SQL查询)不会是一个大问题。
任何人都可以在这里指导我吗?
答案 0 :(得分:3)
我认为你应该尝试使用PHP在服务器端渲染React组件。这是一个PHP lib来做到这一点。
但是,是的,您基本上需要使用PHP代码中的V8js。但是,这是一种实验性的,你可能需要使用其他的。 (而这种“反过来”可能是使用Node / Express来渲染你的组件。Here is some thoughts on how to do it。)