我喜欢在React中使用同构JavaScript的容易程度。但唯一让我感到困扰的是,浏览器需要下载两次数据。首先在DOM标记中下载,然后以JSON格式再次下载以在运行时初始化状态。既然所有数据都已经在DOM中,那么React不应该能够仅基于DOM重新生成吗?
我尝试使用自定义绑定程序在KnockoutJS中进行渐进增强实验progressive enhancement in KnockoutJS。我希望能够用类似的方式在React中实现相似的效果。
//Custom binding to load the values into the view model from the DOM
ko.bindingHandlers.PE = {
init: function(element, valueAccessor, allBindings) {
var bindings = allBindings();
if (typeof bindings.text === 'function') {
bindings.text($(element).text());
}
}
};
更新
在React中放置读取DOM值的逻辑似乎不是惯用方法。但是,没有什么能阻止您编写一些JavaScript代码以自己收集值!鉴于以上示例,您可以执行以下操作。
var comments = $('.media').map(function() {
return {
Author: $(this).find('.media-object').attr('src'),
Text: $(this).find('.media-body').text()
};
});
然后使用它来在客户端初始化React组件。我对此感到满意。