当前位置: 首页 > news >正文

React开发实战

关键知识点

1、

<Fragment></Fragment>:占位符,不会出现在节点中
复制代码

2、 this指向问题,用bind

3、 给数组加值,擅用解构:[...this.state.list,newValue]

4、 dangrouslySetInnerHTML={{__html:item随便}}:不转义,容易被XSS注入脚本攻击。

5、 父组件可以将数据、方法传给子组件,子组件可以使用父组件传过来的数据,使用父组件传过来的方法,从而改变父组件的数据。注意,子组件里没有父组件的方法,所以要通过bind(this),将this指向父组件,否则指向的是子组件,就会提示找不到这个方法。

6、

新版推荐以下方法修改值
prevState即setState所传的参数,是数据改变之前的state,
this.setState((prevState) => ({
    list:[...prevState,prevState.newValue],
    newValue:''
}))
复制代码

7、

import PropTypes from 'prop-types'

testItem.PropTypes = {
    test:PropTypes.string.isRequired,
    test2:PropTypes.number,
    test3:PropTypes.func,
    content:PropTypes.arrayOf(PropTypes.number,PropTypes.string)
}

testItem.defaultProps = {
    test:'default content'
}
复制代码

8、 数据发生变化,驱动页面发生变化,那么如何提高性能? 可通过比较虚拟Dom的变化来比较,比直接通过Dom性能要高

虚拟Dom是一个JS对象,用来描述真实的Dom
<div id='abc'><span>hello</span></div>
即
['div',{id:'abc'},['span',{},'hello']
['div',{id:'abc'},['span',{},'goodBye']
复制代码

React 数据视图更新原理

原来不好的两种方案

方案一:

1、state 数据
2、JSX模板
3、数据 + 模板 结合, 生成真实的DOM显示
4、state 发生改变
5、数据 + 模板结合,生成真实的DOM,替换原始的DOM

缺陷:
第一次生成了一个完整的DOM片段
第二次生成了一个完整的DOM片段
第二次的DOM替换第一次的DOM,非常耗性能
复制代码

方案二:

1、state 数据
2、JSX模板
3、数据 + 模板 结合, 生成真实的DOM显示
4、state 发生改变
5、数据 + 模板结合,生成真实的DOM,并不直接替换原始的DOM
6、新的DOM(DocumentFragment) 和原始的DOM做比对,找差异
7、找出页面哪里发生了变化
8、用新的DOM中发生变化的元素,替换掉老的DOM中对应的元素

缺陷:
性能的提升并不明显
复制代码

方案三:

1、state 数据
2、JSX模板
3、数据 + 模板 生成虚拟DOM(虚拟DOM就是一个JS对象,可以用来描述真实的DOM)
    <div id='abc'><span>hello</span></div>
    即
    ['div',{id:'abc'},['span',{},'hello']
    ['div',{id:'abc'},['span',{},'goodBye']
4、用虚拟DOM的结构生成真实的DOM 来显示
    <div id='abc'><span>hello</span></div>
5、state发生变化
6、数据 + 模板 生成新的虚拟DOM(极大的提升了性能)
    ['div',{id:'abc'},['span',{},'hello']
7、比较原始虚拟DOM和新的虚拟DOM的区别,找到区别是哪里(极大提升了性能)
8、直接操作DOM,改变对应DOM节点发生的变化

优点:
1、性能提升了
2、使得跨端应用得以实现。 React Native
复制代码

9、JSX -> creatElement -> 虚拟Dom(JS对象)-> 真实的Dom

return <div></div>
return React.createElement('div',{},'item')
复制代码

10、React虚拟DOM中的Diff算法:虚拟 DOM Diff 算法解析

11、ref 可用来获取Dom节点

12、

13、安装charles:用于接受请求,返回本地的数据,模拟服务器

14、axios用于向后台请求数据,替代ajax

componentDidMount() {
    axios.get('/api/todolist').then(()=>{
        console.log('获取数据')
    }).catch(()=>{
        console.log('获取报错')
    })
}
复制代码

15、redux devtools,redux用于多个组件之间的数据通信

npm install --save redux
复制代码

16、安装 styled-components

17、reset.css

18、Redux的工作流程

相关文章:

  • 工作中总结前端开发流程--vue项目
  • Java各种IO流的总结
  • MySQL-事务管理(基础)
  • Vultr 教程目录
  • Navicat
  • HTML-表单
  • mahout的数据文件格式
  • 微信小程序开发总结
  • 编码占用字节数
  • spring boot 整合mybatis 无法输出sql的问题
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 动态魔术使用DBMS_SQL
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • 接力10G,25G将成为数据中心首选解决方案
  • Redash本地开发环境搭建
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Docker入门(二) - Dockerfile
  • happypack两次报错的问题
  • HTTP 简介
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • vuex 学习笔记 01
  • Vultr 教程目录
  • WebSocket使用
  • 从setTimeout-setInterval看JS线程
  • 浮动相关
  • 回顾2016
  • 技术:超级实用的电脑小技巧
  • 将 Measurements 和 Units 应用到物理学
  • 两列自适应布局方案整理
  • 聊聊hikari连接池的leakDetectionThreshold
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前嗅ForeSpider采集配置界面介绍
  • 删除表内多余的重复数据
  • 7行Python代码的人脸识别
  • Nginx实现动静分离
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • !!Dom4j 学习笔记
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #Java第九次作业--输入输出流和文件操作
  • #传输# #传输数据判断#
  • #前后端分离# 头条发布系统
  • $refs 、$nextTic、动态组件、name的使用
  • (1)Nginx简介和安装教程
  • (33)STM32——485实验笔记
  • (C#)一个最简单的链表类
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (二十三)Flask之高频面试点
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (论文阅读40-45)图像描述1
  • (转)用.Net的File控件上传文件的解决方案
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版