一、React的特点

1、自动化的UI状态管理:自动完成数据变化与界面效果的更新。

2、虚拟DOM:创建1个虚拟的dom节点树,放在内存里(内存修改数据效率高),数据变化时先修改内存里的虚拟DOM,然后与页面的DOM进行对比,React可以做优化,优化后可只修改变化的部分,缩小节点更改的范围,从而提高效率。(正常情况下改变节点后要重新渲染页面,效率慢)。

3、组件化开发:管理页面的各功能,将1个功能视为1个组件。每个组件都可以有各自的结构、样式、行为,然后把所有的组件拼合起来的开发方式。单页应用的实现方式。

4、完全在js中定义UI:一个组件就是1个js。

5、JSX:JavaScript XML。使React的标签写法像html那样来编写

6、只是MVC构架中的V:MVC是一种架构模式,model(模型:获取数据)→ view(视图:渲染)→controller(控制器:关联数据与视图)。

7、单向数据流:只能父级传子级,便于追踪数据的来源。

二、创建一个React应用

1、引入两个React的在线js文件:

<script crossorigin src="js/react.development.js"></script>
<script crossorigin src="js/react-dom.development.js"></script>

  

2、使用:

  ①渲染到页面:ReactDOM.render();

  ②创建元素:React.createElement()

     - 参数1:元素名

     - 参数2:元素属性,格式为JSON。多个单词用驼峰命名,class属性要写成className

     - 参数3:标签内容,可以是文本,也可以是另一个元素对象。

3、JSX语法

   ①引入JSX编译器 babel.min.js ,然后在script里写入type值为text/babel,让浏览器认为该代码为JSX代码。但是该方法编译速度很慢,效率低。

   ②JSX规则与XML一致:

    - 允许嵌套

    - 标签必须严格闭合

    - 属性:

       - 大部分属性和HTML标签一致

       - 两个特殊:for→htmlFor class→className

       - 可以自定义属性

    - 引用变量必须用 {}花括号,花括号中可做运算

    

    - 引用组件用<>尖括号

    - 注释,{/*注释*/} ,要加花括号

    - style属性要写成花括号形式,如:style={{color:"red"}};

三、React的组件

  1、组件是编写React应用的基础,一个应用就是由大大小小的组件组合而成。

  2、组件分类:

     - 无状态组件:普通函数定义,无状态,没有生命周期,能够优化性能。

    

    - 有状态组件:推荐ES6语法定义,React内部会创建实例,并拥有完整的生命周期。

    

  3、组件规范

     - 每个组件必须有返回值,如果返回值又是一个组件则必须有且仅有一个根元素,即return后面必须有1个标签,要有返回值的起始。

    

     - 如果返回null/false,编译时会被替换为< noscript />

四、数据传递的props

  1、每个函数的参数里都有props。从父组件可以通过属性传递数据到子组件。得到的对应属性值可用props调用。

  2、数据可以在组件之间传递,不过只能是单向,由父传子。

  3、通过自定义属性传递

     - 无状态组件:直接用props传递

    

     - 有状态组件:用this.props传递

    

  4、通过文本内容传递:

     - 无状态组件:

    

    - 有状态组件:

    

五、给组件单独设置样式

  通过class属性来设置样式使得组件的内聚度不够,可以通过组件的style来为每个组件单独设置样式。(若有短线连接的要使用驼峰命名)

  

六、组件状态更新(state)

  1、使用ref获取节点,利用DOM完成节点操作   

  2、使用state对象:

     - 初始化: 在constructor里初始化

    

    - 使用:直接用this.state进行调用state。

    

     其中onClick={this.addCount}是xml里的事件处理方式,也可以直接在花括号里写函数,但是当函数体较大时,可以单独定义。

  3、函数定义方法:在render前(同级)定义函数。

     - 事件绑定的时候,即仅限事件处理函数,该函数里的this指向被改变成了undefined,所以改回来.

     - 方法一:在调用函数里写onClick={this.addCount.bind(this)},强行将this绑定到之前的this上

     - 方法二:使用箭头函数 addCount = ()=>{}

    

七、props和state的区别

  1、props:

     - 用于在组件之间传递数据。

     - 通过自定义属性或标签之间的内容传递。

     - 单向传递,只能父传子。

     - 可以手动设置其值,但不会更新组件状态。

  2、state:

     - 每个组件都可以初始化state对象。

     - state不能传递,传递只能用props

     - 可以设置值,对应的组件状态会更新,可以通过响应式更改UI节点

     - 设置值的方法必须是setState,而不是直接使用this.state。

八、事件处理中的this

  1、在ES6的类中,事件处理方法的this为undefined。

  2、解决办法:

     - 在构造函数中将当前对象绑定给方法中的this。

    

    - 使用箭头函数定义方法。

    

    - 在绑定事件时使用bind方法。

    

    - 在绑定事件时使用箭头函数。

  

React初识整理(一)的更多相关文章

  1. React初识整理(五)--Redux和Flux(解决状态传递问题)

    Flux 1.引入:在React的应⽤中,状态管理是⼀个⾮常重要的⼯作.我们不会直接对DOM节点进⾏操作,⽽是通过将数据设置给state,由state来同步UI,这种⽅式有个潜在的问题,每个组件都有独 ...

  2. React初识整理(四)--React Router(路由)

    官网:https://reacttraining.com/react-router 后端路由:主要做路径和方法的匹配,从而从后台获取相应的数据 前端路由:用于路径和组件的匹配,从而实现组件的切换. 如 ...

  3. React初识整理(二)--生命周期的方法

    React生命周期主要有7中: 1. componentWillMount() :组件将要挂载时触发 ,只调用1次 2. componentDidMount() :组件挂载完成时触发,只调用1次 3. ...

  4. React初识整理(三)--受控组件解决方法

    1. 受控组件:组件处于受控制状态,不可更改输入框内的值. 2. 什么情况下会让组件变成受控组件? - 文本框设置了value属性的时候 - 单选框或多选框设置了checked属性的时候. 3. 如何 ...

  5. React笔记整理

    大概大半年时间都在用react写项目,一直在笔记上零零星星地记录着,在新的一年即将到来之际,打算整理整理发出来. 一.React是什么? React是Facebook开源的用于构建用户界面的javas ...

  6. React初识(按钮点击+输入绑定)

    简单按钮点击事件: <!DOCTYPE html><html>  <head>  <meta charset="utf-8">    ...

  7. React 初学整理

    1,通过createElement创建元素 HELLO Word ps:切记组建名称首字母大写 2,虚拟DOM 在虚拟DOM上操作 通过render来渲染真是DOM 3,JSX JSX 是对JS的语法 ...

  8. react初识

    如下是在研究中记录的笔记: 1,作用:局部的更新dom结构;虚拟dom保证性能2,和mvc不同,mvc是对于技术上的分离(分类),而react是组件上的分离,每个视图模块分离,复用,以视图模块为单位3 ...

  9. React学习-React初识

    一.前言 为什么要去学习React呢,关于前端三大框架Angular,Vue,React其实都得去学吧,因为大家都在用啊,大家都再谈论啊,面试什么的都要求,没办法,曾几何时,大家都说求求大佬们别坑新了 ...

随机推荐

  1. 洛谷 P1712 [NOI2016]区间(线段树)

    传送门 考虑将所有的区间按长度排序 考虑怎么判断点被多少区间覆盖,这个可以离散化之后用一棵权值线段树来搞 然后维护两个指针$l,r$,当被覆盖次数最多的点的覆盖次数小于$m$时不断右移$r$,在覆盖次 ...

  2. 【渗透测试】如何利用burpsuite测试无回显漏洞

    前面的文章讲了在windows和linux上的不同的无文件渗透测试的方法,那么这篇文章给大家讲解如何在漏洞没有回显的情况下,利用burpsuite自带插件进行测试的方式. 首先我们稍微提一下有哪些无回 ...

  3. C 语言实例 - 使用结构体(struct)

    C 语言实例 - 使用结构体(struct) C 语言实例 C 语言实例 使用结构体(struct)存储学生信息. 实例 #include <stdio.h> struct student ...

  4. 利用arguments对象在javaScript中实现重载(overload)

    一些概念: 重载(overload): 什么是: 相同函数名,不同参数列表的多个函数,在调用时,可根据传入参数的不同,自动选择对应的函数调用! 为什么: 减轻调用者的负担,一个函数名,可执行多种操作 ...

  5. ctypes to load library in c/c++

    cdll.LoadLibrary(...) restype (default is c_int) argtypes (what's the default? c_int?) customized da ...

  6. 112 Path Sum 路径总和

    给定一棵二叉树和一个总和,确定该树中是否存在根到叶的路径,这条路径的所有值相加等于给定的总和.例如:给定下面的二叉树和 总和 = 22,              5             / \  ...

  7. 安卓新的联网方式 Volley的使用(一)加载图片与 json

    最近刚接触安卓, 以前搞wp ,一对比起来 ,安卓怎么这么麻烦.联网必须要重新开一个线程才可以.而且加载网络图片也很麻烦...花了很久一直卡在快速滑动加载网络图片的listview上面 ,一直很纠结痛 ...

  8. 03.Javascript——入门一些方法记录之Map和Set

    JavaScript的默认对象表示方式{}可以视为其他语言中的Map或Dictionary的数据结构,即一组键值对. 但是JavaScript的对象有个小问题,就是键必须是字符串.但实际上Number ...

  9. MyBatis的数据库操作

    MyBatis的数据库操作 大学毕业有一段时间了,作为一名没有任何开发工作经验的大专毕业生想找到一份软件开发的工作确实很难,但我运气还算不错,应聘上一份java web开发的工作.作为一名新人,老板给 ...

  10. Glide图片框架

    //加载圆形图片Glide.with(this).load(WSCAppStatic.WEB_KEFU_PHOTO_URL+ "?usercode=8120000315") .as ...