【发布时间】:2014-08-05 14:07:24
【问题描述】:
查看the Virtual DOM in React.js 并通过一些性能测试,我对这个库非常感兴趣。它似乎是 Backbone 出色的模型、路由器和集合结构的完美插件。
但是,由于缺乏高质量的教程和课程,我有几个问题希望这里的人能够回答:
HTML 模板
React 是否完全摒弃了 HTML 模板的概念?我说的是把你的视图标记放在一个单独的 HTML 文件中(或者在同一页面上的 <script type=text/template> 标记中)。你知道,就像你对 underscore.js Handlebars 等所做的那样......
Starter kit examples 似乎都在您的视图类中包含 JSX 或 React.DOM 函数,这对我来说似乎有点混乱,我可以看到这有点失控,因为您的视图变得越来越复杂.
这是一个使用带有嵌套表的基本 Twitter Bootstrap 面板元素呈现 2 个值及其总和的示例。
var CustomView = React.createClass({
render: function() {
var x = this.props.x;
var y = this.props.y;
return (
<div className="panel panel-primary">
<div className="panel-heading">
<h1 className="panel-title">Should I put all this markup somewhere else?</h1>
</div>
<div className="panel-body">
<table className="table">
<thead>
<tr>
<th>X</th>
<th>Y</th>
<th>Combined val</th>
</tr>
</thead>
<tbody>
<tr>
<td>{x}</td>
<td>{y}</td>
<td>{x + y}</td>
</tr>
</tbody>
</table>
</div>
</div>
);
}
});
我不想知道是否可以将这些东西移动到单独的文件中,而是想了解在使用 React 时什么被认为是最佳实践。
更新和设置数据
Why React page 声明如下:
简单地表达您的应用在任何给定时间点的外观,当您的基础数据发生变化时,React 将自动管理所有 UI 更新。
我不完全理解这是如何工作的。例如,使用 <CustomView x="20" y="10"> 之前的 React 组件。最初我会这样渲染它:
var x = 20;
var y = 10;
React.renderComponent(
<CustomView x={x} y={y} />,
document.getElementById('view-container')
);
现在,当我想随时更新 CustomView x 更改时,我应该如何进行? React 应该是您在 Angular 和 Ember 中找到的数据绑定的替代方案,无需进行 2 路绑定,那么我该如何实现呢?我如何告诉CustomView 关注x 并在它发生变化时自动重新渲染?
当然,只是为 x 分配一个新值没有任何作用。
我知道有 setState 方法,但我仍然必须手动调用它,对吗?因此,如果我使用 React 视图和 Backbone 模型,代码可能如下所示:
// Data model: Backbone.js
var model = new Backbone.Model({text: "Please help! :)"});
// Create view class
var View = React.CreateClass({
render: function() {
return (
<p>{this.props.text}</p>
);
}
});
// Instantiate new view
var view = React.renderComponent(
<View text={model.get("text")}>,
document.getElementById('view-container')
);
// Update view
model.on("change:text", function(model, newValue) {
view.setState({
text: newValue
});
});
// Change data
model.set("text", "I do not understand this ...");
这似乎是一个非常奇怪的设置,我几乎可以肯定这不可能是你应该这样做的方式。
我希望得到一些建议来帮助我朝着正确的方向前进。
提前感谢您的任何反馈和帮助。
【问题讨论】:
-
我自己没有使用过,但可能值得一看 react-bootstrap。它似乎是将 Bootstrap 组件分解为 React 组件,因此您可以使用
<Panel header="foo bar">... table ...</Panel>代替CustomView中的一大块面板 html。
标签: javascript backbone.js mvvm view reactjs