美文网首页
REACT入门

REACT入门

作者: Lethe35 | 来源:发表于2018-07-30 16:26 被阅读0次

1. 概述

1.1. 概述

颠覆式前端UI开发框架。相对Angular,Angular作为一个MVVM框架,显得过重,不适合对性能要求比较高的栈,其UI组件的封装相对复杂,不利于重用,而React却另辟蹊径地解决了这些问题。 React主要用于构建UI。你可以在React里传递多种类型的参数,如声明代码,帮助你渲染出UI、也可以是静态的HTML DOM元素、也可以传递动态变量、甚至是可交互的应用组件。

1.2. 特点

1.声明式设计:React采用声明范式,可以轻松描述应用。

2.高效:React通过对DOM的模拟,最大限度地减少与DOM的交互。

3.灵活:React可以与已知的库或框架很好地配合。

1.3. HTML模板

使用 React 的网页源码,结构大致如下:

<!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">

 // ** Our code goes here! **

 </script>

 </body>

</html>

需要注意的是,最后一个 <script> 标签的 type 属性为 text/babel 。这是因为 React 独有的 JSX 语法,跟 JavaScript 不兼容。凡是使用 JSX 的地方,都要加上 type="text/babel" 。其次,上面代码一共用了三个库: react.js 、react-dom.js 和 Browser.js ,它们必须首先加载。其中,react.js 是 React 的核心库,react-dom.js 是提供与 DOM 相关的功能,Browser.js 的作用是将 JSX 语法转为 JavaScript 语法,这一步很消耗时间,实际上线的时候,应该将它放到服务器完成。

1.4. JSX语法

JSX语法,像是在Javascript代码里直接写XML的语法,实质上这只是一个语法糖,每一个XML标签都会被JSX转换工具转换成纯Javascript代码,React 官方推荐使用JSX, 当然你想直接使用纯Javascript代码写也是可以的,只是使用JSX,组件的结构和组件之间的关系看上去更加清晰。

  • JSX是什么?

JSX是一种像下面这样的语法:

const element = <h1>Hello, world!</h1>;

它是一种JavaScript语法扩展,在React中可以方便地用来描述UI。本质上,JSX为我们提供了创建React元素方法(React.createElement(component, props, ...children))的语法糖(syntactic sugar)。上面的代码实质上等价于:

var element = React.createElement(

 "h1",

 null,

 "Hello, world!"

);

1.4.1 基本语法

1)自定义组件名首字母大写;元素名即组件名,首字母需要大写。首字母小写时React会以为这是HTML的标准标签,因此自定义的组件名需要首字母大写,否则会报错。

2)嵌套;在render函数中return返回的只能包含一个顶层标签,否则也会报错。如:

[图片上传失败...(image-60cba4-1532938934761)]

3)求值表达式;JSX基本语法规则,遇到HTML标签(以<开头),就用HTML规则解析;遇到代码块(以{开头),就用JS规则解析。

4)驼峰命名

5)htmlFor,className;添加组件属性,需要注意,class属性需要写成className,for属性需要写成htmlFor,因为class和for是JS保留字 .组件的属性可以在组件类的this.props对象上获取,比如name属性可以通过this.props.name读取。

6)JSX允许直接在模板插入JS变量。如果这个变量是一个数组,则会展开这个数组的所有成员

[图片上传失败...(image-c36e5e-1532938934761)]

  1. 在JSX中插入用户输入是安全的,默认情况下ReactDOM会在渲染前,转义JSX中的任意值,渲染前,所有的值都被转化为字符串形式,这能预防XSS攻击。

1.4.2注释

注释可以添加在两个部分:

1)子节点中,子节点中时,添加多行注释需要用{/**/}大括号包起来。不能添加单行注释

2)属性中;多行注释直接/**/注释,单行注释用//,并且需要换行

1.4.3条件判断的写法

  1. 使用三元表达式

2)使用变量

3)直接调用函数

4)使用逻辑运算符

1.4.4函数表达式

image.png image.png

利用即时执行函数,即时执行函数有两种形式:示例中的括号在外面的形式,这种返回的直接是函数运行后的值;括号在里面的形式,运行后先拿到了函数的引用,然后传入参数(this)运行函数得到返回值。

1.4.5false处理

1)被渲染成 id="false",id值为字符串false:

ReactDOM.render(<div id={false} />, mountNode);

2)input value 的值将会是 "false" 字符串

ReactDOM.render(<input value={false} />, mountNode);

3)没有子节点

ReactDOM.render(<div>{false}</div>, mountNode);

2. 组件

2.

2.1. 组件

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


image.png

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

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

image.png

上面代码会报错,因为HelloMessage组件包含了两个顶层标签:h1和p。

组件的用法与原生的 HTML 标签完全一致,可以任意加入属性,比如 <HelloMessage name="John"> ,就是 HelloMessage 组件加入一个 name 属性,值为 John。组件的属性可以在组件类的 this.props 对象上获取,比如 name 属性就可以通过 this.props.name 读取。

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

2.2. 组件的生命周期

组件的生命周期分成三个状态:

1)Mounting:已插入真实 DOM

2)Updating:正在被重新渲染

3)Unmounting:已移出真实 DOM

React 为每个状态都提供了两种处理函数,will 函数在进入状态之前调用,did 函数在进入状态之后调用,三种状态共计五种处理函数。

1)componentWillMount()

2)componentDidMount()

3)componentWillUpdate(object nextProps, object nextState)

4)componentDidUpdate(object prevProps, object prevState)

5)componentWillUnmount()

此外,React 还提供两种特殊状态的处理函数。

1)componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用

2)shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用

2.3. 组件数据来源

组件的数据来源,通常是通过 Ajax 请求从服务器获取,可用 componentDidMount 方法设置 Ajax 请求,等到请求成功,再用 this.setState 方法重新渲染 UI

image.png

在这里,componentDidMount是一个在组件被渲染的时候React自动调用的方法。动态更新的关键点是调用this.setState()。我们把旧的评论数组替换成从服务器拿到的新的数组,然后UI自动更新。正是有了这种响应式,一个小的改变都会触发实时的更新。这里我们将使用简单的轮询,但是你可以简单地使用WebSockets或者其它技术。

相关文章

  • react+webpack项目实际开发应用

    react+webpack项目实际开发应用 在《react入门》和《react入门提高》中我讲了,react的基础...

  • react+webpack项目实际开发应用

    react+webpack项目实际开发应用 在《react入门》和《react入门提高》中我讲了,react的基础...

  • react+webpack项目实际开发应用

    react+webpack项目实际开发应用 在《react入门》和《react入门提高》中我讲了,react的基础...

  • React Native:从入门到原理

    React Native:从入门到原理 React Native:从入门到原理

  • React Native学习资料

    React 入门实例教程React-Native入门指南Flex 布局教程:语法篇React Native探索(二...

  • React Native

    JavaScript 标准参考教程(alpha)ECMAScript 6入门 React 入门实例教程React ...

  • React 实践(一)

    参考:《React 入门实例教程--阮一峰》、《React 学习教程--众成翻译》。React 框架入门学习摘录。...

  • awesome-react-native

    React React 中文文档一定要看官方文档 React 入门实例教程阮一峰老师出品,最好的 react 入门...

  • 慕课视频

    免费 《Web安全-XSS》《ReactNative基础与入门》《React入门》《在React中使用Redux数...

  • React入门-001

    +++Categories = ["React",]Tags = ["React","入门",]date = "2...

网友评论

      本文标题:REACT入门

      本文链接:https://www.haomeiwen.com/subject/tmvfvftx.html