zoukankan      html  css  js  c++  java
  • React

    React基础:

    React 起源 facebook ,是一款js库。

    原因:

    ①因为mvc无法满足js扩展需求,每当添加一个新的需求和功能,mvc的复杂度成倍上升,代码变得脆弱难以管理。

    ②模型和视图的双向流动性。

    React的一些特点:

    ①不使用模板,react构建界面,是进行拆分,组件

    ②不是mvc框架,可以组合式的用户界面库,鼓励重用ui组件

    ③响应式,数据的更新更简单

    传统web,关注数据,然后通过DOM修改界面

    react 通过 render 方法调用     

    ④有一套自己的表现

    符合现代浏览器(ie8以上)

    轻量级

    React原理:

    ①虚拟DOM

    web应用一直是直接对DOM操作,但是这种是很浪费资源的,每次修改都会重新渲染,生成新的DOM树

    react为了尽可能减少DOM操作,采用虚拟DOM来帮助更新修改。

    虚拟DOM:就是把DOM抽象成一个JS对象,通过对象来描述相关的页面真实DOM,并实时更新真实DOM

    ②DIff算法

    虚拟DOM通过DIff算法,保证,界面更新先进行虚拟DOM(JS对象)渲染后,再进行整体的真实DOM替换,减少了操作,增加了效率和性能。

    虚拟DOM确保,只对界面上真正发生了变化的DOM进行修改。

    web页面是DOM树创建的,部分改变整个节点都会变化,react则是根据状态决定界面,前后两个状态对应两个界面,react来对照区别。

    facebook工程师进行了两个假设降低了diff算法的复杂度:

    ①两个相同组件产生类似的DOM结构,不同组件产生类似的DOM结构

    ②对于同层次的节点位置,可以通过唯一id进行区分,同一位置前后输出不同节点,react直接删除前面的,然后创建插入节点,前面的连同子节点都会被删除。

        逐层次进行节点的比较,react两棵树,只进行同层次的节点比较。 同一层就是运用diff算法,不同节点的操作只有删除和创建,以此稳定结构和性能提升。

    React 2013年发布开源,    

    React开发环境:

    引用:react.js 核心文件

               react-dom.js 面向web (共两个分支:另一个 react-native 原生App)  必须在核心文件后,依赖核心文件

               babel.js ES6转换ES5 JSX转换为JavaScript 为了让当前浏览器能识别、兼容

    下载:react.js 核心包   npm i react --save

         react-dom.js       npm i react-dom --save   

         babel.js               npm i babel-standalone  --save

    创建项目:

    creat- react-app 项目名称

    gitignore  忽视文件

    robots.text 给爬虫使用者写的信息

    热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。

    App.test.js 单元测试(前端比较少)

    JSX元素对象,或者组件对象,必须只有一个根节点(元素)。

    JSX是对html进行了扩充:

    优点:

    ①JSX执行更快,在编译JavaScript代码时进行了优化

    ②类型更安全,编译过程如果出错就不能编译,及时发现错误

    ③JSX编写模板更加简单快速(不要和vue比)

    注意:

    ①JSX必须要有一个根节点

    ②正常的普通HTML元素要小写。如果是大写,默认为是组件

    JSX表达式

    ①由html元素构成

    ②中间如果需要插入变量用{}

    ③{}内可以使用表达式

    ④{}中间表达式中可以使用jsx对象

    ⑤属性和html内容一样都是用{}插入内容

    React样式:

    JSX_style 样式

    ①class,style中,不可以存在多个class属性,不能合并  <div class="sss" class="ddd"></div>

    ②style 样式中,存在多个单词的属性组合,第二个单词开始,首字母大写,或者引号引起来。  borderBottom  or  "border-bottom"  建议用驼峰

    ③ 多个类共存操作,<h1 classsName = {"abc"+classStyle}  >AZUKI七-古月</h1> ,如果是数组的话可通过空格拼接 str.join(" ")      

    ④注释   {/* 必须在括号内 */}

    React 轻便 规则少

    React组件:

    函数式组件:相对简单的,静态的,没有事件交互的,不需要写方法的使用函数式组件

    类组件:一般又称为动态组件,一般会有交互或者数据修改(有事件,点击事件等用类组件)

    复合组件:组建中又有其他的组件

    React状态:

    React 的 State 就是 Vue 中的 Data

    React 如果反复渲染同一个组件多次,为了提高性能,是不会进行重新初始化的。

    初始化数据:this.state内

    修改数据:this.setState

    React 条件渲染

    React中条件渲染即和JavaScript中,条件运算,如 if ... else ... 三元运算符等。(render 渲染,条件渲染的方式是多样灵活的,非常非常多的渲染方式,React所有的操作都是需要自己去定义的)

    ①直接通过条件运算返回要渲染的jsx对象

    ②通过条件运算得出jsx对象,再将jsx对象渲染到模板中

    案例一:

    直接条件判断返回不同的内容,返回的jsx对象上进行操作

    案例二:

    在变量上做操作,element等于一个组件,然后再插入到需要渲染的位置上

    列表渲染

    通过循环直接输出模板,需要将列表的内容,拼装成数组。

    将列表内容拼装成数组放置到模板中。将数据拼装成数组的JSX对象。(Welcome W必须大写)

    Props

    父传递给子组件数据,不能子传父。

     props的传值,可以是任意的类型。

    Props可以设置默认值

    HelloMessage.defaultProps = { name:"老陈",msg:" helloworld" }   ps:反向修改父元素的数据,从而达到子传父的效果;

    注意:props 可以传递函数,props 可以传递父元素的函数,就可以去修改父元素的 state,从而达到传递数据给父元素。

    【在mac系统下,react用create-react-app my-app(my-app是你新建项目的名字)创建项目时,出现:-bash: create-react-app: command not found

     此时用npm init react-app my-app命令即可。后面附上GitHub里面详细的使用说明 点击查看

    React数据传递:字传父

    调用父元素的函数从而操作父元素的数据,从而实现数据从子元素传递至父元素。

    tips:

    React事件

    特点:

    ①react事件,绑定事件的命名为驼峰命名法。第二个单词大写

    ②{},传入一个函数,认定这是一个函数,必须在大括号内,而不是一个字符串

     事件对象:React 返回的事件对象是代理的原生的事件对象,如果想要查看事件对象的具体值,必须之间输出事件对象的属性。

    原生,阻止默认行为时,可以直接返回 return false ;

    React中,阻止默认必须 e.preventDefault() ;

    React事件传参

     箭头函数:使用你在声明的时间点,而不是调用的地址。和谁调用无关,和声明的地址有关。

    匿名函数:如果没有绑定,那就是谁调用地址就是谁。

    call和apply是在调用的时候用。bind是在绑定的时候使用的。【this.parentEvent.call(this)

  • 相关阅读:
    Python os.getcwd()方法
    Python os.walk()方法
    PyTorch 模型构造
    Python map()函数
    字符串转数字测试--知识备忘
    如何判断一个变量是数组Array类型--实例--加个人见解
    js面试题
    ios学习笔记
    读取图片文件--实例
    名言记录
  • 原文地址:https://www.cnblogs.com/goforxiaobo/p/13151871.html
Copyright © 2011-2022 走看看