【React入门实例(运行于浏览器duan)】

1、HTML模板

 

2、ReactDOM.render()

ReactDOM.render是React的最基本方法,用于将模板转换为HTML语言,并插入指定的DOM节点。html

ReactReactDOM.render(
    <h1>Hello,World!</h1>,
    document.getElementById('example')   
);

上面代码将一个 h1 标题,插入 example 节点,运行结果以下:算法

HTML 语言直接写在 JavaScript 语言之中,不加任何引号,这就是jsx的语法,它容许 HTML 与 JavaScript 的混写数组

3、JSX语法

上面代码体现了 JSX 的基本语法规则:遇到 HTML 标签(以 < 开头),就用 HTML 规则解析;遇到代码块(以 { 开头),就用 JavaScript 规则解析。上面代码的运行结果以下:数据结构

JSX 容许直接在模板插入 JavaScript 变量。若是这个变量是一个数组,则会展开这个数组的全部成员,如:函数

运行结果以下:性能

4、组件

React代码容许将代码封装成组件,而后像插入普通HTML标签同样,在网页中插入这个组件。React.createClass方法就用于生成一个组件类this

上面代码中,变量 HelloMessage 就是一个组件类。模板插入 <HelloMessage /> 时,会自动生成 HelloMessage 的一个实例(下文的"组件"都指组件类的实例)。全部组件类都必须有本身的 render 方法,用于输出组件。spa

注意:组件类的第一个字母必须大写,不然会报错,好比HelloMessage不能写成helloMessage。另外,组件类只能包含一个顶层标签,不然也会报错。设计

运行结果以下:code

添加组件属性,有一个地方须要注意,就是 class 属性须要写成 className ,for 属性须要写成 htmlFor ,这是由于 class 和 for 是 JavaScript 的保留字。

5、this.props.children

this.props的属性和组件的属性一一对应,可是this.props.children例外,它是表示组件的全部子节点

上面代码的 NoteList 组件有两个 span 子节点,它们均可以经过 this.props.children 读取,运行结果以下:

须要注意的是:this.props.children 的值有三种可能:若是当前组件没有子节点,它就是 undefined ;若是有一个子节点,数据类型是 object ;若是有多个子节点,数据类型就是 array 。因此,处理 this.props.children 的时候要当心。

6、PropTypes

组件的属性能够接受任意值,字符串、对象、函数等等均可以。有时,咱们须要一种机制,验证别人使用组件时,提供的参数是否符合要求。

 组件类的PropTypes属性,就是用来验证组件实例的属性是否符合要求,以下:

上面的Mytitle组件有一个title属性。PropTypes 告诉 React,这个 title 属性是必须的,并且它的值必须是字符串。如今,咱们设置 title 属性的值是一个数值。

这样一来,title属性就通不过验证了。控制台会显示一行错误信息。

此外,getDefaultProps 方法能够用来设置组件属性的默认值。

上面代码会输出"Hello World"。

7、获取真实的DOM节点

组件并非真实的 DOM 节点,而是存在于内存之中的一种数据结构,叫作虚拟 DOM (virtual DOM)。只有当它插入文档之后,才会变成真实的 DOM 。根据 React 的设计,全部的 DOM 变更,都先在虚拟 DOM 上发生,而后再将实际发生变更的部分,反映在真实 DOM上,这种算法叫作 DOM diff,它能够极大提升网页的性能表现。

可是,有时须要从组件获取真实 DOM 的节点,这时就要用到 ref 属性:

上面代码中,组件 MyComponent 的子节点有一个文本输入框,用于获取用户的输入。这时就必须获取真实的 DOM 节点,虚拟 DOM 是拿不到用户输入的。为了作到这一点,文本输入框必须有一个 ref 属性,而后 this.refs.[refName] 就会返回这个真实的 DOM 节点。

须要注意的是,因为 this.refs.[refName] 属性获取的是真实 DOM ,因此必须等到虚拟 DOM 插入文档之后,才能使用这个属性,不然会报错。上面代码中,经过为组件指定 Click 事件的回调函数,确保了只有等到真实 DOM 发生 Click 事件以后,才会读取 this.refs.[refName] 属性。

8、this.state

组件免不了要与用户互动,React 的一大创新,就是将组件当作是一个状态机,一开始有一个初始状态,而后用户互动,致使状态变化,从而触发从新渲染 UI 

 

上面代码是一个 LikeButton 组件,它的 getInitialState 方法用于定义初始状态,也就是一个对象,这个对象能够经过 this.state 属性读取。当用户点击组件,致使状态变化,this.setState 方法就修改状态值,每次修改之后,自动调用 this.render 方法,再次渲染组件。

因为 this.props 和 this.state 都用于描述组件的特性,可能会产生混淆。一个简单的区分方法是,this.props 表示那些一旦定义,就再也不改变的特性,而 this.state 是会随着用户互动而产生变化的特性。

9、表单

用户在表单填入的内容,属于用户跟组件的互动,因此不能用 this.props 读取

 

上面代码中,文本输入框的值,不能用 this.props.value 读取,而要定义一个 onChange 事件的回调函数,经过 event.target.value 读取用户输入的值。textarea 元素、select元素、radio元素都属于这种状况

相关文章
相关标签/搜索