美文网首页
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入门

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