react

React学习笔记(八) 虚拟DOM与Diff算法

折月煮酒 提交于 2020-02-05 00:59:46
1、虚拟 DOM (1)什么是虚拟 DOM 我们先来回顾一下什么是 DOM?DOM 是一个 用于表示 HTML 文档结构 的树,实际上它是一个 JavaScript 对象 树上的每一个节点代表一个 HTML 元素,每个 HTML 元素拥有大量的属性、方法和事件,是一个十分复杂的对象 所谓的虚拟 DOM 就是 用于表示真实 DOM 结构 的一个 JavaScript 对象,它与真实 DOM 之间存在一个 映射关系 每个 React 元素对应一个 HTML 元素,但是 React 元素只保留着一些必要的属性,所以相对而言修改开销较小 (2)为什么使用虚拟 DOM 当状态发生变化时,React 不会直接更新视图(其目的是为了减少多次操作实际 DOM) 而是创建一个新的虚拟 DOM 缓存 所有发生变化的状态,然后等到合适的时候 一次性 更新到浏览器 当组件重新渲染时,React 不会渲染整个视图(其目的是为了减少大量操作实际 DOM) 而是使用 Diff 算法 比较新旧虚拟 DOM 之间的差异,然后只把 真正发生变化的地方 更新到浏览器 用一句话概括,使用虚拟 DOM 的目的就是 提高性能 ,它的核心其实就是 减少实际的 DOM 操作 (3)怎么样使用虚拟 DOM 虚拟 DOM 是 React 实现的内部机制,它的运作过程可以粗略概括如下: 使用 JavaScript 对象创建一棵虚拟

react 路由封装及页面授权

好久不见. 提交于 2020-02-04 23:46:00
我所参考的博客 src下建一个router.js import Landing from './components/layout/Landing' import Login from './components/auth/Login' import Register from './components/auth/Register' import Dashboard from './components/dashboard/Dashboard' let router = [ { path: '/',//首页默认加载的页面 componentName: Landing, exact: true, //是否为严格模式 }, { path: '/login',//后面是传递的参数id componentName: Login }, { path: '/register', componentName: Register, }, { path: '/dashboard', componentName: Dashboard, auth: true,//是否授权 // routes: [ /** 嵌套路由 dashboard下面又有子页面*/ // { // path: '/dashboard/', // componentName: main, // exact: false // },

react基础---组件01

好久不见. 提交于 2020-02-04 22:16:29
目录 1. 安装 2. antd框架 3. 列表中农数组添加删除 4. 纯函数PureComponent,React.memo 5. 高阶组件HOC 链式调用 装饰器 6. 组件复合 例1: Fetch组件--请求 例2: Filter组件--筛选出p标签 例3: Radio组件 内容 1. 安装 安装脚手架 #npm install create-react-app -g 新建项目 #create-react-app react01 或 #npx create-react-app react01 2. antd框架 #npm install antd --save 按需引入 #npm install react-app-rewired@2.0.2-next.0 babel-plugin-import --save const { injectBabelPlugin } = require("react-app-rewired"); module.exports = function override(config, env) { config = injectBabelPlugin( // 在默认配置基础上注入 // 插件名,插件配置 ["import", { libraryName: "antd", libraryDirectory: "es", style: "css" }]

React Native Build Apk

一笑奈何 提交于 2020-02-04 12:33:16
1 React Native安卓项目打包APK 1.1 产生签名的key 先通过keytool生成key 1 keytool -genkey -v -keystore demo-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 20000 将生成的key启动到项目android/app目录下面 1 mv demo-release-key.keystore android/app/ 1.2 修改android/gradle.properties文件,增加如下 1234 MYAPP_RELEASE_STORE_FILE=my-release-key.keystoreMYAPP_RELEASE_KEY_ALIAS=my-key-aliasMYAPP_RELEASE_STORE_PASSWORD=******MYAPP_RELEASE_KEY_PASSWORD=****** 其中 ** 为Key设置的密钥和存储密码 1.3 修改android/app/build.gradle文件中的签名配置 1234567891011121314大专栏 React Native Build Apkline">15161718192021 ...android { ... defaultConfig {

响应国家号召,在家撸码之React迁移记

狂风中的少年 提交于 2020-02-04 09:17:49
  最近这段时间新型冠状病毒肆虐,上海确诊人数每天都在增加,人人提心吊胆,街上都没人了。为了响应国家号召,近期呆在家里撸码,着手将项目迁移到React中,项目比较朴素,是一张线索提交页面,包含表单、图片滚动等功能。 一、目录结构   项目基于Create React App构建而成,简单的做了下二次封装,src目录的结构如下所示。 ├── src │ ├── __tests__ ---------------------- 测试文件 │ ├── common ------------------------- 通用功能 │ ├── component ---------------------- 组件 │ ├── img ---------------------------- 图片 │ ├── page --------------------------- 页面 │ ├── router ------------------------- 路由 │ ├── store -------------------------- 状态容器 │ ├── index.scss --------------------- 公共样式 │ ├── index.js ----------------------- 入口文件   在index.js中会引入公共样式、路由、统计脚本、通用功能等

react-redux 之Provider和connect

和自甴很熟 提交于 2020-02-03 22:57:56
react-redux:redux是数据存储和管理的工具,但是想要在react中使用redux,并不能直接将store、action和react组件建立连接,所以就需要react-redux来结合react和redux Provider:提供的是一个顶层容器的作用,实现store的上下文传递:在原应用组件上包裹一层,使原来整个应用成为Provider的子组件,接收Redux的store作为props,通过context对象传递给子孙组件上的connect connect:使用connect可以把state和dispatch绑定到react组件,使得组件可以访问到redux的数据。函数最终返回的是将state和dispatch绑定到Connect之后的新组件。React-Redux 将所有组件分成两大类:UI 组件(presentational component)和容器组件(container component) UI 组件又称为"纯组件",即它纯函数一样,纯粹由参数决定它的值:特征 只负责 UI 的呈现,不带有任何业务逻辑 没有状态(即不使用 this.state 这个变量) 所有数据都由参数( this.props )提供 不使用任何 Redux 的 API 容器组件: 负责管理数据和业务逻辑,不负责 UI 的呈现 带有内部状态 使用 Redux 的 API React

React 解析/ 第二节 使用 Reac

强颜欢笑 提交于 2020-02-03 21:26:30
官方脚手架 create-react-app React 提供了一个官方的命令行工具(CLI)—— create-react-app ,是专门用于快速搭建单页面应用(SPA)的脚手架,它基于 Webpack + ES6,无需开发者自行配置,只需通过一些命令就能快速构建 React 开发环境、运行项目,并带有热更新,且支持打包生成开发环境可用的构建版本。 说明: CLI 工具假定用户对 Node.js 和相关构建工具有一定程度的了解,如果你是新手,我们强烈建议先在不用构建工具的情况下学习 React,在熟悉 React 本身之后再使用 CLI。 此处仅作简单的了解,对后续 React 知识点的学习没有影响! 执行以下命令创建项目: npm i create-react-app -g // 全局安装 create-react-app 脚手架 create-react-app project-name // 通过 create-react-app 创建名为 project-name 的项目(项目名称不能使用大写英文) 项目的目录结构: node_modules:项目依赖; package.json:项目的描述文件,记录项目依赖的版本信息等; public: manifest.json 指定了开始页面为 index.html,是代码执行的源头; scr:项目的源代码; .gitignore

【 React 】- 7 例子:评论列表

匆匆过客 提交于 2020-02-03 20:45:24
1 创建列表组件 - CmtList.jsx import React from 'react' import CMTItem from './CmtItem.jsx' import CMTBox from './CmtBox.jsx' // 评论列表组件 class CMTList extends React . Component { constructor ( props ) { 来源: CSDN 作者: 不知所起 一往而深 链接: https://blog.csdn.net/weixin_42112635/article/details/104159499

React前端开发环境搭建

删除回忆录丶 提交于 2020-02-03 20:21:35
    React前端开发环境搭建 Let's begin (一)首先我们需要安装node.js,以下是node.js的官网,下载即可。 node.js官网:http://nodejs.org/en/ 选择合适的版本后下载下来,如下图所示: 然后根据提示安装node.js,npm包管理工具也会一同安装。 安装完成后,打开cmd命令行,输入node -v和npm -v来查看版本号(中间有空格),如果显示则安装成功。 成功安装了node和npm后,因为国内的npm下载很慢,我们可以使用淘宝的cnpm,同时设置镜像地址。 npm install -g cnpm --registry=https://registry.npm.taobao.org 安装成功后,我们可以键入cnpm -v检查是否安装成功 (二)创建我们的第一个react项目 例如我们要创建一个todolist项目,我们要以此执行一下步骤: 首先在所在文件夹地址栏中输入cmd enter 使用cnpm install -g create-react-app 全局安装 然后再使用create-react-app todolist指令在该文件夹下创建todolist文件夹(时间可能有点长,网速问题) 但是中间可能会出现一些警告,那些无关紧要,只要不是错误信息。 在创建成功的基础上,然后通过cd进入刚创建好的todolist文件夹

reactNative 集成支付宝支付

随声附和 提交于 2020-02-03 07:01:59
一、android集成 1、下载支付宝sdk,在android/app下新建libs文件夹,将sdk放入此目录 sdk下载地址 2、将libs目录下的alipaySDK-20180403.aar导入,在android/app/build.gradle里添加如下代码: dependencies { ... ... compile ( name : 'alipaySdk-15.6.8-20191021122514' , ext : 'aar' ) ... . . } 2.5、在android/build.gradle添加如下: allprojects { repositories { mavenLocal ( ) flatDir { //支付宝需要 dirs 'libs' } ... ... } } 3、在android/app/src/AndroidManifest.xml文件里面添加声明: < ! -- 支付宝权限声明 -- > < uses - permission android : name = "android.permission.INTERNET" / > < uses - permission android : name = "android.permission.ACCESS_NETWORK_STATE" / > < uses - permission