什么是React
Facrbook开源。一个用于构建用户界面的JavaScript库。React 是一个采用声明式,通过对DOM的模拟,最大限度地减少与DOM的交互。高效而且灵活的用来构建用户界面的框架。
HTML 模板
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello React!</title>
<script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
<script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('example')
);
</script>
</body>
</html>
ReactDOM.render()
ReactDOM.render是React 最基本方法,用于将模板转为 HTML 语言,并插入指定的 DOM 节点。
ReactDOM.render(
<h1>Hello, world!</h1>,//将一个 h1 标题,插入 example 节点
document.getElementById('example')//返回对拥有指定 ID 的第一个对象的引用。如果没有指定 ID 的元素返回 null。如果存在多个指定ID的元素则返回 undefined。
);
JSX
React 使用 JSX 来替代常规的 JavaScript。允许 HTML 与 JavaScript 的混写
<!DOCTYPE html>
<html>
<head>
<script src="../build/react.js"></script>
<script src="../build/react-dom.js"></script>
<script src="../build/browser.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
var names = ['Alice', 'Emily', 'Kate'];
ReactDOM.render(
<div>
{
names.map(function (name, index) {
return <div key={index}>Hello, {name}!</div>
})
}
</div>,
document.getElementById('example')
);
</script>
</body>
</html>
组件
React 允许将代码封装成组件(component),然后像插入普通 HTML 标签一样,在网页中插入这个组件。React.createClass 方法就用于生成一个组件类。
//Hellokuangfeng(首字母大写)就是一个组件类,模板插入 <Hellokuangfeng /> 时,会自动生成 Hellokuangfeng 的一个实例
var Hellokuangfeng = React.createClass({
//render()方法是类组件中唯一必需的方法。
render: function() {
return <h1>Hello {this.props.name}</h1>;//组件的属性在组件类的 this.props 对象上获取
}
});
//所有组件类都必须有自己的 render 方法,用于输出组件。
ReactDOM.render(
<HelloKuanfeng name="kuangfeng" />,//组件加入一个name属性,值为kuangfeng
document.getElementById('example')
);
this.props.children在提取子节点的时候,根据子节点的数量(0、1、多个)。他的数据类型分别是undefined、object、array
PropTypes
组件类的PropTypes属性用来验证组件实例的属性是否符合要求
var data = 123;//赋值data
var MyTitle = React.createClass({
propTypes: {
title: React.PropTypes.string.isRequired,//proTypes告诉 React,这个 title 属性是必须的,而且它的值必须是字符串。
},
render: function() {
return <h1> {this.props.title} </h1>;
}
});
ReactDOM.render(
<MyTitle title={data} />,//验证不通过
document.getElementById('example')
);