React初识
来源:互联网 发布:电玩游戏java实战 编辑:程序博客网 时间:2024/06/05 10:50
一、基础概念
body
中的script
的type
属性为text/babel
,因为React独有的JSX语法与js不兼容,凡是使用JSX的地方,都要加上type="text/babel"
。- 首先必须加载三个库:
react.js
(React的核心库),react-dom.js
(提供与DOM相关的功能),browser.js
(将JSX语法转为js语法)。
二、ReactDOM.render()
- ReactDOM.render()是React的最基本方法,用于将模版专为HTML语言,并插入指定的DOM节点。
ReactDOM.render( <h1>Hello, world!</h1>, document.getElementById('example'));
三、JSX语法
- JSX对的基本语法规则:遇到HTML标签(以 < 开头),就用HTML规则解析;遇到代码块(以 { 开头),就用js规则解析。
- JSX允许直接在模版插入js变量。如果这个变量是一个数组,则会展开这个数组的所有成员。
- 代码示例:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script src="../build/react.js"></script> <script src="../build/react-dom.js"></script> <script src="../build/browser.min.js"></script></head><body><div id="example1"></div><script type="text/babel"> var names = ['Mike', 'Alice', 'Serena']; ReactDOM.render( <div> { names.map(function (names) { return <div>Welcome,{names}!</div> }) } </div>, document.getElementById('example') );</script><div id="example2"></div><script type="text/babel"> var fruits = [ <h1>Fruits</h1>, <h2>apple</h2>, <h2>mango</h2> ]; ReactDOM.render( <div> { fruits.map(function (fruits) { return <div>{fruits}</div> }) } </div>, document.getElementById('example2') );</script></body></html>
四、组件
- React允许将代码封装成组件(component),然后像插入普通HTML标签一样,在网页中插入这个组建。
React.createClass
方法就用于生成一个组件类。 - 所有的组件类必须有自己的
render
方法,用于输出组件。 - 注意:组件类的第一个字母必须大写,否则会报错。另外,组件类只能抱憾一个顶层标签,否则会报错。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>组件 component</title> <script src="../build/react.js"></script> <script src="../build/react-dom.js"></script> <script src="../build/browser.min.js"></script></head><body><div id="exam"></div><script type="text/babel"> var WelMes = React.createClass({ render:function () { return <h1>Welcome {this.props.name}</h1>; } }); ReactDOM.render( <WelMes name="Sunny"/>, document.getElementById('exam') );</script></body></html>
注意!!!
- 上述代码中,
WelMes
就是一个组件类。模版插入<WelMes />
时,会自动生成WelMes
的一个实例。所有组件类都必须有自己的render
方法,用于输出组件。 - 组件类的第一个字母必须大写,否则会报错。另外,组件类只能抱憾一个顶层标签,否则会报错。
var WelMes = React.createClass({
render:function () {
return <h1>Welcome {this.props.name}</h1><p>to China</p>;
}
});
上述代码会报错,因为WelMes
组件包含了两个顶层标签:h1
和p
。组建的用法和原生的HTML标签完全一致,可以任意加入属性,例如
<WelMes name="Sunny"/>
,就为WelMes
组件加入了一个name
属性,值为Sunny
。组件的属性可以在组件类的this.props
对象上获取,比如name
属性就可以通过this.props.name
读取。添加组件属性还需注意:
class
属性需要写成classname
,for
属性需要写成htmlFor
。因为class
和for
是js的保留字。
五、this.props.children
this.props
对象的属性与组件的属性一一对应,除了this.props.children
属性。他表示组件的所有子节点。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>this.props.children</title> <script src="../build/react.js"></script> <script src="../build/react-dom.js"></script> <script src="../build/browser.min.js"></script></head><body><script type="text/babel"> var NotesList = React.createClass({ render: function () { return( <ol> { React.Children.map(this.props.children, function (child) { return <li>{child}</li>; }) } </ol> ); } }); ReactDOM.render( <NotesList> <span>Welcome</span> <span>World</span> </NotesList>, document.body );</script></body></html>
上述代码中NotesList
组件有两个span
子节点,它们都可以通过this.props.children
读取。
- 注意:
this.props.children
的值有三种可能:undefined
,object
,array
。若当前组件没有子节点,他就是undefined
;若有一个子节点,他就是object
;若有多个子节点,数据类型就是array
。故在处理this.props.children
时要格外小心。 React
提供一个工具方法React.children
来处理this.props.children
。我们可以用React.Children.map
来遍历子节点,而不必担心this.props.children
的数据类型时undefined
还是object
六、PropTypes
- 组建的属性可以接受任意类型的值(字符串,对象,函数等)。有时需要一种机制,验证别人使用组件时所提供的参数是否符合要求。组件类的
PropTypes
属性,就是用来验证组件实例的属性是否符合要求。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>PropTypes practice</title> <script src="../build/react.js"></script> <script src="../build/react-dom.js"></script> <script src="../build/browser.min.js"></script></head><body><script type="text/babel"> var MyTitle = React.createClass({ propTypes: { title: React.PropTypes.string.isRequired, }, render: function () { return <h1>{this.props.title}</h1>; } }); var data = 25; ReactDOM.render( <MyTitle title={data} />, document.body );</script></body></html>
上面的
MyTitle
组件有个title
属性。PropTypes
告诉React
这个属性是必须的,而且它的值必须是字符串。若设置title
属性的值是一个数值,则title
属性就无法通过验证,控制台显示上述错误信息。可以用
getDefaultProps
方法设置组件属性的默认值。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>可以用`getDefaultProps`方法设置组件属性的默认值</title> <script src="../build/react.js"></script> <script src="../build/react-dom.js"></script> <script src="../build/browser.min.js"></script></head><body><script type="text/babel"> var MyTitle = React.createClass({ getDefaultProps: function () { return { title: 123 }; }, render: function () { return <h1>{this.props.title}</h1>; } }); ReactDOM.render( <MyTitle />, document.body );</script></body></html>
七、获取真实的DOM节点
- 待学。
0 0
- 初识React
- 初识react
- 初识react
- 初识React
- React初识
- React初识
- 初识React
- 初识React
- React初识
- 初识React
- 【React】初识React
- react(一):初识react
- React Native初识
- 初识React.js
- 初识React Native
- 初识React Native
- 初识react native
- React-native FlexBox初识
- JAVA笔记-如何将百万级数据高效的导出到Excel表单
- HTTP请求中8种请求方法
- 用IO流技术-将GBK格式的文本文件转存为UTF-8格式的文本文件
- Qt Quick快速入门之qml布局
- 集成百度sdk
- React初识
- 第48篇一对多实现(五)老师端动态加载学生头像及PHP array_map
- block、inline、inline-block对比
- 使用Angular提交表单
- 这年头,企业营销如何避免用户“反感”?
- window下的tomcat手册之二【使用自己的jdk】
- mysql 同一表中.两个字段值互相复制,从一个字段值复制到另一个
- servlet获取web.xml中的信息
- 值传递和引用传递区别