本文主要看阮一峰老师的博客:react入门示例教程
亲测教程中的部分功能在react16后失效(除了python还有不向下兼容的….),欢迎交流,希望大家少走些弯路。
自己学习过程中做的react实例
一、react网页源码
1 | <!DOCTYPE html> |
1️⃣body可加入script标签,但type属性为text/babel,因为react是JSX,html和css都可以写在js里。
2️⃣用了三个库:react.js、react-dom.js、Browser.js,react.js核心库,react-dom提供DOM(文档对象类型Document Object Moodel)相关,Browser是把JSX转为JS(但消耗时间)。
1 | $ babel src --out-dir build |
把src目录里的js进行转码后放在build目录。
二、ReactDOM.render()
把模版转为HTML,插入DOM结点。(关于DOM可先看Java Script DOM编程艺术,讲的很基础)
1 | ReactDOM.render( |
- ReactDOM.render(参数一, 参数二)
- 参数一:被渲染的标签
- 参数二:被插入的父元素
三、JSX语法
1 | var names = ['Alice', 'Emily', 'Kate']; |
在参数一中,{}
中可以键入javascript
代码,可以用来遍历数组,对象等;在其中可以使用return
来返回标签。
JSX 的基本语法规则:
遇到 HTML 标签(以 <
开头),就用 HTML 规则解析;
遇到代码块(以 {
开头),就用 JavaScript 规则解析。
数组直接写在{}
中就能遍历:
1 | var arr = [ |
四、组件
React允许用React.createClass方法自己封装组件,然后像插入普通HTML元素节点一样在网页中插入。
1 | var HelloMessage = React.createClass({ |
此时,HelloMessage就是一个组件类。
1 | var HelloMessage = React.createClass({ |
上述代码是错的,因为return了两个元素节点h1和p
组件类的第一个字母必须大写
组件类只能包含一个顶层标签
组件类必须有 / 结尾
所有组件类都必须有自己的 render 方法,用于输出组件
五、this.props.children
this.props.children
:表示组件的所有子节点。(关于props)
把NotesList
下的所有子节点渲染到 ol li
中
1 | <div id="example"></div> |
上面的NoteList组件有三个span子节点
this.props.children
的值有三种可能:如果当前组件没有子节点,它就是 undefined
;如果有一个子节点,数据类型是 object
;如果有多个子节点,数据类型就是 array
。
React 提供一个工具方法 React.Children
来处理 this.props.children
。我们可以用 React.Children.map
来遍历子节点,而不用担心 this.props.children
的数据类型是 undefined
还是 object
。更多的 React.Children
的方法,请参考官方文档。
6、PropTypes
组件类的PropTypes
属性,就是用来验证组件实例的属性是否符合要求
指定组件中的属性类型
如下代码验证组件实例属性是否符合要求
1 | var MyTitle = React.createClass({ |
如下代码设置组件属性的默认值
1 | var MyTitle = React.createClass({ |
React版本16以后不再支持createclass以及其内部的getDefaultProps!要改用下面的.component
以及defaultProps
方法!
1 | <div id="example"></div> |
在浏览器中按F12看到开发者工具里因为默认title值是数字而报错。
加油。
- 本文作者: Raphael_Li
- 本文链接: https://lifei-2019.github.io/react-01/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!