zoukankan      html  css  js  c++  java
  • react系列---------React简介(1)

    React 简介:

    React 是一个用于构建用户界面的 JAVASCRIPT 库。

    React 主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图)。

    React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源。

    React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它。

    React诞生的原因

      主要是当时市面上的这些框架都无法满足 facebook 公司的业务需求 (1. 数据量很大,数据不好管理 2. 页面DOM结构不能好复用)

    facebook 内部工程师 想办法去解决这些需求,通过努力,找到解决方案,开源了 react。

    笔试题: 谈谈react最显著的特点?

    1.flux 统一管理数据的思想(高阶)

    2.虚拟DOM概念(virtual DOM):使用js对象的方式去描述一个真实的DOM元素,在后面数据变化后,让生成的新的虚拟DOM和旧的虚拟DOM,是 diff 算法进行比较,得出差异(patch),然后把 patch 更新到页面上。

    3.组件化:可以复用的代码提取出来,形成一个单独的结构。(1. 结构html标签 2. 样式 3. 形成 4. 数据state)

    附:

    首次引入虚拟DOM 概念(主要的原因是,在前端没有引入MVC概念的时候,在jQuery存在的哪个年代,大家都是DOM操作,通过DOM监听,DOM选取操作,如果操作量不大,也不会产生太大的问题,但是业务一旦复杂,数据量多,则这个时候如果继续DOM操作,还是很消耗性能,浏览器的底层是做渲染和重绘是很消耗性能,我们应该尽可能减少重绘。主要的原因是因为在开发的时候,有的时候,只有部分的数据发生变化,其实页面上主要的DOM结构还没有太大的变化,很多的DOM都可以复用)Facebook的工程师引入 虚拟DOM(使用javascript对象的方式去描述一个DOM结构,然后通过diff算法去比较新的虚拟DOM和旧的虚拟DOM,得出区别(patch 补丁) snabbDOM h函数 patch)。 注意:由于虚拟DOM的引入使得页面的加载性能得到显著的提升,以至于后面的一些其他的MVVM框架,都引入虚拟DOM的概念。例如 vuejs 就是借鉴了 react 里面的 虚拟DOM(virtual DOM)注意: 虚拟DOM的概念是Facebook的工程师想出来的。但是 底层 diff 算法不是Facebook首创,很早有了 diff 算法。

    React解决了什么问题?

    1. 数据统一管理 2. 性能提升 3. 代码复用

    jsx语法

    什么是jsx语法?

            jsx 翻译过来就是 javascript + xml。说白了就是允许开发者可以在 js 语境下直接写 html 代码(标签),不需要使用引号包裹。

    为什么引入jsx语法?

     答:我们react引入虚拟DOM,但是使用react原生的  api 实现虚拟DOM,太麻烦了 React.CreateElement(tagName, tagAttr, tagContent)。 引入一种新的语法 jsx(javascript + xml) 说白了:可以在js语境下写 html 代码(其底层的原因是使用webpack调用babel 进行转换)。我们把jsx语法写的代码,称之为:jsx元素,jsx代码,react元素。

      jsx好处:方便开发者。

    参考网址:https://zh-hans.reactjs.org/docs/introducing-jsx.html

    库和框架有什么区别?(谈谈库和框架之间的区别?)

                jquery 这个是一个库;vuejs 是一个框架。 简单:库只是一个工具集合(里面封装很多的好用的函数、方法)。框架是一套成熟的解决方案(框架里面可以组织很多的库)。 vuejs 数据驱动,没有DOM操作(vuejs底层还是要DOM操作,尤大大把底层DOM操作封装起来)。

    React的组件:

    什么是组件?  组件说白了就是以后自定义的HTML代码片段(可能会高度复用的代码,提取出来,形成一个公共的代码块,可以复用)

    组件的特点:         1. html结构(属性)render       2. 样式      3. 行为       4. 数据(1. props 2. state

    为什么要学习组件?        实现代码的复用。

    如何学习组件?               在 react 里面组件分为两类( 1. 函数式组件(无状态) 2. 类组件(有状态 state、无状态 ))

    组件的分类:

    1.函数式组件 :  定义一个构造函数,然后函数首字母大写,其次返回值必须是一个合法jsx 元素。并且我们把函数组件也叫无状态的组件。

    2.类组件 : 使用es6里面提供的class 关键字去定义一个类,但是这个类必须遵循两点(继承React Component 父类   必须定义render方法 )。类组件如果存在state属性,则被称为有状态的组件,如果没有state属性,则被称为无状态组件。

     函数式组件

      使用构造函数的方式去编写一个组件。

      1.构造函数的首字母必须大写

      2.函数的返回值是一个jsx 表达式

      语法格式

    function MyCompoent(){
        return (
            <div>
                ....
            </div>
    
        )
    }

      

       类组件

          使用class关键字去定义一个组件,这个组件叫做类组件。

      class 这个关键字是 es6 引入的语法糖,其实就是对构造函数的一个封装。在其他的面向对象语言里面,class 关键是定义一个类。

      extends 关键字是 es6 里面引入一个新的特性,可以实现类的继承。解决es5里面的原型链的继承问题。

    注意  : 在 react 里面如果要使用类组件,则该组件必须先继承react提供的一父组件。React.Component

    注意  :   类组件必须定义一个 render 方法。返回的返回值是一个 jsx 表达式

          语法:

    class MyDiv extends React.Component {
    
        render(){
            return (
                <div>
                    .....
                </div>
            )
        }
    }

           组件的样式:

    1.行内样式style     给行内的 style 属性的属性值应该是一个对象。传递的时候是一个 {{color: 'red' }} 第一个大括号,代表定义一个js语境,第二个大括号代表传递的是一个对象。

    2.class类名         (注意:html里面我们可以使用class定义类名,但是在js语境下 class 是关键字,不能随便用,则我们把样式的类名换成 className)只需要在组件内部通过 import 方式直接导入一个外部的css文件。(脚手架的底层使用css-loader解决css依赖)

         属性的传递:

           有的时候,我们希望在外部可以给组件传递一点数据,则我们称为属性传递,在调用方通过属性的方式传递数据即可。在组件这边如果是构造函数组件,则我们可以通过构造函数的形参来接受传递的数据(形参名称一般使用 props,翻译过来就是属性。)如果我们的组件是类组件,则我们可以通过 this.props 属性获取传递过来的属性信息,同时如果我们的类组件定义 construtor 构造方法,则我们的构造方法也可以接受一个参数 props,代表调用方给组件传递的属性。

     组件的行为:

    行为就是我们所说的事件,在原生js当中,事件绑定有三种:

    1.行内绑定   

    2.外部绑定     document.getElementById('btn').onclick = function(){}

    3.事件监听     document.getElementById('btn).addEventListen('click', fn, false);

    注意::但是在React里面只支持行内绑定。

    在React 绑定事件  :1. 事件的名称必须大写,on事件类型(onClick onChange)

               2.事件的回调函数必须是一个函数,这个注意(1. event 2. this指向问题)

     React 的 使用:

              react 的使用需要使用一个官方提供的脚手架进行开发。不像vuejs 直接引入一个 vue.js 文件就可以使用。脚手架的底层使用的 webpack,把 react 里面的一些新特性写的代码做了转换,转换成浏览器可以识别的代码,例如 react 引入一种叫做 jsx 的语法。

    npm init -y
    npx create-react-app my-app
    cd my-app
    npm start
    注意1 :npx 代表是局部安装后面的脚手架 create-react-app

    脚手架提供的常用的命令

    yarn start 用于在本地启动一个测试服务器:3000端口
    yarn build 用于打包,打包后的文件可以直接上线
    yarn test  用于前端测试
    yarn eject 用于把 webpack 配置文件导出(create-react-app 底层就是 webpack

     扩展阅读::

    1. https://blog.csdn.net/hhthwx/article/details/80071056
    2. https://www.jianshu.com/p/ad533d71f79e
    3. https://www.cnblogs.com/fu-fu/p/7232745.html
    集思广益,仅供学习,侵权即删!!
  • 相关阅读:
    linux-常用命令
    linux
    测试基础
    链家笔试1
    链家笔试2
    链家笔试3
    MySql优化
    Http1.1和Http2.0
    Charles学习
    链表中倒数第k个结点
  • 原文地址:https://www.cnblogs.com/hudunyu/p/11575184.html
Copyright © 2011-2022 走看看