var Hello = React.createClass({
render: function() {
return (
<div className="HelloBox">
Hello, world! I am a HelloBox.
</div>
);
}
});
React.render(
<Hello />,
document.getElementById('content')
);
1):createClass: 创建React组件对应的类,描述你将要创建组件的各种行为,其中只有当组件被渲染时需要输出的内容的render接口是必须实现的,其他都是可选.组件与标准原型类的不同之处在于,你不需要使用 new 来实例化。
1.1):createClass中的输入render:该方法返回一颗React组件树,这颗树最终会被渲染成HTML。其中,这里的<div>
标签不是真正的 DOM 节点;他们是 React div
组件的实例。你可以认为这些标签就是一些标记或者数据, React 知道如何处理它们。React 是安全的,不会生成 HTML 字符串,因此默认阻止了 XSS 攻击。
2):render:实例化根组件,启动框架,把标记注入到第二个参数指定的原生的 DOM 元素中。如果 ReactElement 之前就被渲染到了container
中,该函数将会更新此 ReactElement,仅改变需要改变的 DOM 节点以展示最新的 React 组件。
番外:既然上述叙述了创建React组件对应的类,那么很多人会想到如何依据类创建实例?
3):createElement,创建并返回一个新的指定类型的 ReactElement
,支持type,config,children三个参数:
ReactElement.createElement = function(type, config, children) {
...
}
ReactElement.createFactory = function(type) {
var factory = ReactElement.createElement.bind(null, type);
return factory;
};
var h = React.createFactory(Hello);
h({x:1})
h({x:2})
h({x:3})
var CommentList = React.createClass({
render: function() {
return (
<div className="commentList">
Hello, world! I am a CommentList.
</div>
);
}
});
var CommentForm = React.createClass({
render: function() {
return (
<div className="commentForm">
Hello, world! I am a CommentForm.
</div>
);
}
});
var CommentBox = React.createClass({
render: function() {
return (
<div className="commentBox">
<h1>Comments</h1>
<CommentList />
<CommentForm />
</div>
);
}
});
React.createElement(tagName)
表达式,其它什么都不做。这是为了避免全局命名空间污染。
属性( property )
,这些
属性( properties )
可以通过
this.props
访问到。
var Comment = React.createClass({
render: function() {
return (
<div className="comment">
<h2 className="commentAuthor">
{this.props.author}
</h2>
{this.props.children}
</div>
);
}
});
上述,通过
this.props
来访问传入组件的数据,键名就是对应的命名属性,也可以通过
this.props.children
访问组件内嵌的任何元素。
var CommentList = React.createClass({
render: function() {
return (
<div className="commentList">
<Comment author="Pete Hunt">This is one comment</Comment>
<Comment author="Jordan Walke" >This is *another* comment</Comment>
</div>
);
}
});
var Hello = React.createClass({
render: function() {
return (
<div className="HelloBox">
{this.props.name}
</div>
);
}
});
var helloWorld = React.render(
<Hello name="hl" />,
document.getElementById('content')
);
helloWorld.setProps({name:'violin'}
初学react,文中如有不妥之处请大家指出,后期会进一步讲解react是如何实现:构建随着时间数据不断变化的大规模应用程序。^_^。
本文来自网易实践者社区,经作者王海玲授权发布。