前导介绍:

facebook、2013开源。官网:https://reactjs.org/

版本v16之后,对其底层的核心算法进行了重构,引入了底层的新引擎React Fiber(16版本以后的react)

可支持服务端渲染

生态丰富:React Router、React Native、React VR、Redux(状态管理)、Jest(测试相关开发)、TypeScript等

应用:支持前端开发、服务端开发、移动端开发、vr项目开发

优点:项目容易维护,使用了虚拟DOM、相较于直接操作dom来说性能更好。

特点:API比较少

环境安装:

1. 本机React开发环境安装。

npm安装命令:sudo npm i create-react-app -g

(mac版复制上述命令到全局命令行。window版去掉前边sudo关键字进行安装。下同)

创建项目(对应目录下执行命令):create-react-app 自定义文件夹名字

(在要创建react项目的目录下,开启命令行输入上述命令。)

观察命令行,create的过程中安装了三个东西:-

①. react:安装react

②. react-dom:此库用来渲染dom,如果没有他,我们的代码没有办法渲染到dom当中,所以需要引入,使用react,必须引入react-dom。

③. react-scripts:内置的webpack,有一些命令可以让我们去使用

安装完毕后,可以使用以下几个运行的命令:

值得注意的是,npm start 没有run,但是npm run build 就需要run。

另外,npm run eject是不可会退的,他会把你所有的依赖都移除,所以谨慎使用。

2. Chrome开发者工具安装。

  a. React Devloper Tools

  b. Redux DevTools

(需要安装以下两个,自行想办法去chrome商店安装。或者可以去插件相关github下载安装包,解压后打开这个地址chrome://extensions/拖拽到chrome进行安装)

模版目录:

react项目目录

如果学过vue,跟vue的目录基本一致

□ node_modules

□ public

□ src

□ package.json

□ .gitignore

□ readme.md

重点说下public和src文件夹

· public

favicon.icon

index.html

根目录文件

manifest.json

实现一个快捷图标,配合serviceWorker实现pwa

· src

App.css

App.js

主页面

App.test.js

实现自动化测试

index.css

index.js

主入口

logo.svg

serviceWorker.js

pwa技术使用,以写网页的形式写一个app应用。帮助我们实现一个网页应用

原理:

render函数及其作用
将jsx语法放到react中进行渲染。

render接收两个参数:

参数

含义

要进行渲染的元素

一个容器、通过原生js的id选择器选择了一个#root的根元素。此元素位于index.html中

将第一个参数渲染的元素放到第二个参数元素中

render的名字不可改,不过可以利用es6的as方法进行修改:


不过ReactDOM的名字随便更改:

【ps:这都是es6的模块导入与导出的知识点啊!】

React的名字不能改,是因为render函数内部有用到React这个变量。

JSX语法会利用babel进行转化,转化成React.createcreateElement函数。

此时就必须要用到React这个变量。

React.createElement函数:

React.createElement函数接收多个参数

参数

含义

示例

备注

type

元素类型

“div”

html中已有的标签即可

props

attrs属性

{id: 'gjf'}

无时可以传null占位

children...

子元素们

'标签内的文本'

React.createElement()

可以是文本、

也可以是另一个新的函数用于生成新的标签,

子元素可以有无数个一直延伸,props后边有几个参数就有几个子元素。

重写react.createElement方法

初步体验使用:不用JSX语法转译,而是通过React.createElement自己写一段Node对象来生成html

可见,JSX语法就是React.createElement函数的语法糖。

App生成的对象打印VNode节点对象:

React.createElement模拟实现:

不引入React,而是自己写一个React让其是一个对象,对象里边有createElement方法。

第一步:搭出大致框架

此时的打印结果如下:

第二步:深入细节

离胜利只差一步的时候被卡住了,怎么把得到的dom元素字符串化呢!

使用js自带的这些转化字符串的方法都不可用:

后来发现,我把createElement和render一起实现了,

createElement只是vNode对象并返回,并不是生成字符串形式的dom标签,

也不是只让render做把React.createElement返回的dom标签直接塞到根节点里的。

render函数才是将React.createElement生成的vNode渲染成html元素并插入到html当中的!

重写:第二步深入细节

修改后实现效果,打印vNode虚拟节点如下:

接下来就需要重写render函数!

重写react-dom.render函数

render(vNode,container)

参数

含义

备注

vNode

虚拟节点

container

容器

包裹虚拟节点生成的html元素

【重写render函数】根据虚拟节点vNode生成dom元素,并插入到container中~

2019-10-13  23:27:35


React - 入门:前导、环境、目录、原理的更多相关文章

  1. react入门之使用webpack搭配环境(一)

    react入门之搭配环境(一) 如果你想直接上手开发,而跳过这些搭配环境的繁琐过程,推荐你使用官方的create-react-app命令 npm install -g create-react-app ...

  2. React 入门学习笔记整理目录

    React 入门学习笔记整理(一)--搭建环境 React 入门学习笔记整理(二)-- JSX简介与语法 React 入门学习笔记整理(三)-- 组件 React 入门学习笔记整理(四)-- 事件 R ...

  3. react 入门与进阶教程

    react 入门与进阶教程 前端学习对于我们来说越来越不友好,特别是随着这几年的发展,入门门槛越来越高,连进阶道路都变成了一场马拉松.在学习过程中,我们面临很多选择,vue与react便是一个两难的选 ...

  4. es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式

    es6 Object.assign   目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...

  5. react入门(3)

    在第一篇文章里我们介绍了jsx.组件.css写法  点击查看react入门(1) 第二篇文章里我们介绍了事件.this.props.children.props....other.map循环  点击查 ...

  6. React Native iOS环境搭建

    前段时间React Native for Android发布,感觉React Native会越来越多的公司开始研究.使用.所以周六也抽空搭建了iOS的开发环境,以便以后利用空闲的时间能够学习一下. 废 ...

  7. 手把手教你用webpack3搭建react项目(开发环境和生产环境)(一)

    开发环境和生产环境整个配置源码在github上,源码地址:github-webpack-react 如果觉得有帮助,点个Star谢谢!! (一)是开发环境,(二)是生产环境. 一.首先创建packag ...

  8. react入门学习及总结

    前言 不知不觉一年又过去了,新的一年又到来,2019应该要好好思考,好好学点有用的东西,规划下自己今后的学习方向,不要再像以前那样感觉很迷茫. react简单介绍 官网及中文文档 https://re ...

  9. 《React Native 精解与实战》书籍连载「Node.js 简介与 React Native 开发环境配置」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  10. React 入门实例教程【转】

    Any day will do. 哪一天都行 Are you kidding? 你在开玩笑吧! Congratulations! 祝贺你! I don’t mean it. 我不是故意的. 原文作者: ...

随机推荐

  1. sql server删除重复记录只保留一条

    今天遇到一个历史导入数据重复的问题,于是要删除重复的记录,一开始想用子查询的方式找到要删除记录的id删除,后来发现DELETE语句可以直接用外连接,这样更加简单,效率也更高. delete sys_p ...

  2. 美国 | USA B1/B2 十年签证到手记

    旅行生活美国 周一早上人还没到公司,就收到EMS快递员的电话,说有两份我的美国领事馆的签证快递,在前台要我签收一下. 美领馆的出签效率果然是高,上周三(8月10日)早上面签的,这三个工作日就把护照送到 ...

  3. Markdown温故知新(1):Markdown面面观

    1.什么是 Markdown? 2.有哪些人在用 Markdown? 3.用 Markdown 的优势是什么? 4.Markdown 的语法标准简介 5.怎么用 Markdown? 6.如何选择 Ma ...

  4. Python多任务—进程

    一.进程以及状态 1.进程 正在运行的应用程序就是一个进程.进程是资源分配的基本单元. Python多进程可以在多核CPU上运行,多进程充分利用了多核的资源. 2. 进程的状态 工作中,任务数往往大于 ...

  5. [干货]kubenertes ingress负载grpc

    目录 概述 搭建 生成公私钥 创建secret 创建ingress 访问 概述 一般情况下,我们的系统对外暴露HTTP/HTTPS的接口,内部使用rpc(GRPC)通讯,这时GRPC在服务之间通过se ...

  6. 个人项目-WC(Java实现)

    一.Github项目地址: https://github.com/kestrelcjx/-WC-Java- 二.PSP表格 PSP2.1 Personal Software Process Stage ...

  7. 创建readonly只读用户脚本

    身为一名运维工作人员,保证服务器的安全是必要项,当开发人员或测试人员需登录到服务器查看日志等操作时,可只给定特定的权限防止误操作的惨况产生. 以下脚本内容均为我本人环境,如有更改可自行修改. ~]# ...

  8. Springboot环境搭建_第一个例子

    首先创建一个maven项目 maven项目创建完成之后,找到pom.xml配置节点.需要springboot-starter-web ,springboot-starter-test,springbo ...

  9. 详解数据库引擎与SQL语句增删改查(非常详细,带例)

    数据库系统(DBMS): 专门负责数据管理的工具.增加数据.创建索引.建立索引之间的关联关系.更新索引...... 连接器:PHP要访问MySQL,可以通过API访问,也可以通过PHP的驱动,而那个驱 ...

  10. 十一、yield生成器

    1.对比range 和 xrange 的区别 >>> print range() [, , , , , , , , , ] >>> print xrange() x ...