博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
react入门笔记
阅读量:5989 次
发布时间:2019-06-20

本文共 2840 字,大约阅读时间需要 9 分钟。

Index.js是程序的入口文件

PWA progressive web application

(registerServiceWorker)

App.test.js自动化测试

定义组件:

class App extends React.component

Label:扩大点击区域

虚拟dom的生成

1.state数据

2.jsx模板
3.数据+模板 生成虚拟dom(虚拟dom就是一个js对象,用它来描述真实dom 损耗了性能)

[‘div’,{id:’abc’},[‘span’,{},’hello’]]

4.用虚拟dom的结构生成真实的dom 来显示

hello

5.state发生变化

6.数据+模板 生成新的虚拟dom(极大提升了性能)
(数据更新)
7.比较原始虚拟dom和新的虚拟dom的区别 找到区别(极大提升了性能)
8.直接操作dom 改变span中的内容

优点:

1.性能提升
2.使得跨端应用得以实现 react native

diff算法:

比对原始虚拟dom和新的虚拟dom之间的差异

提高了比对的性能
同层比对 key值

Ref

setState是一个异步函数,console.log先于执行

setState({…},()=>{

console.log(…)

})

生命周期函数

clipboard.png
constructor组件创建的时候被调用 不属于生命周期

componentWillMount:在组件即将被挂载到页面的时刻自动执行

Render:页面重新渲染
componentDidMount:组件被挂载到页面之后,自动执行

updation:

shouldComponentUpdate:组件被更新之前,会自定被执行(return false不对组件进行更新)
接收两个参数 nextProps nextState
componentWillUpdate:组件被更新之前,会被自动执行,在shouldComponentUpdate之后才执行(返回true才执行)

shouldComponentUpdate-》componentWillUpdate-》Render-》componentDidMount

componentWillReciveProps:当一个组件从父组件接收了参数 只要父组件的render函数被重新执行了 子组件的这个生命周期函数就会被执行(child)

如果这个组件第一次存在于父组件中,是不会被执行的
如果之前已经存在与父组件中,才会被执行
componentWillUnmount:当这个组件即将被从页面中剔除的时候,会被执行 (child)

ajax请求:

componentDidMount

如果放在render会造成死循环(render会被不断触发执行)

Redux

clipboard.png
redux=reducer+flux
clipboard.png
import store from './store/index'
this.setState(store.getState())

index

import {createStore} from 'redux';import reducer from './reducer';const store = createStore(reducer,window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__());export default  store;

actionCreators

import {CHANGE_INPUT_VALUE,ADD_TODO_ITEM,DELECT_TDO_ITEM} from './actionTypes'export const getInputChangeAction = (value)=>({    type:CHANGE_INPUT_VALUE,    value})export const getAddItemAction = (value)=>({    type:ADD_TODO_ITEM})export const getDelectItemAction = (index)=>({    type:DELECT_TDO_ITEM,    index})

actionTypes

export const CHANGE_INPUT_VALUE = 'change_input_value'export const ADD_TODO_ITEM ='add_todo_item'export const DELECT_TDO_ITEM='delect_todo_item'

reducer

import {CHANGE_INPUT_VALUE,ADD_TODO_ITEM,DELECT_TDO_ITEM} from './actionTypes'const defaultState = {    inputValue:'',    list:['zwt','wollen']}//定义仓库的默认数据//reducer可以接受state 但是绝对不能修改state//reducer是春函数 :给定固定的输入 就一定有固定的输出//不能使用雷士date的操作export default (state = defaultState,action)=>{    if(action.type === CHANGE_INPUT_VALUE){        const newState = JSON.parse(JSON.stringify(state))        newState.inputValue = action.value        return newState;    }    if(action.type === ADD_TODO_ITEM){        const newState = JSON.parse(JSON.stringify(state))        newState.list.push(newState.inputValue)        newState.inputValue = ''        return newState;    }    if(action.type === DELECT_TDO_ITEM){        const newState = JSON.parse(JSON.stringify(state))        newState.list.splice(action.index,1)        return newState;    }    return state}//state:整个仓库存储的数据内容//action:

转载地址:http://hsnlx.baihongyu.com/

你可能感兴趣的文章
WordPress网站漏洞利用及漏洞修复解决方案
查看>>
Redux入门
查看>>
alv被display后随数据的变化随时刷新
查看>>
TUN-sosi.sql
查看>>
通过WebUI查看Structured Streaming作业统计信息
查看>>
假如一瞬间让所有人拥有世界上所有的知识 | 20181116奇葩说犀利言句摘录
查看>>
Spring Cloud服务调用整合
查看>>
经纬中国张颖建议创业者:把每周50%时间花在融资上
查看>>
SAP S/4HANA生产订单创建时使用的工厂数据是从什么地方带出来的
查看>>
potree 3D点云初探遇到的各种坑
查看>>
TIOBE 2 月排行榜:时隔 3 年,Groovy 重进 TOP 20
查看>>
jfinal拦截器Interceptor解析
查看>>
WPF Interaction框架简介(一)——Behavior
查看>>
Apache Wicket 8.4.0 发布,Java Web 开发框架
查看>>
Phoenix=HBase+SQL 让HBase插上了翅膀
查看>>
数据结构(四):平衡二叉树(AVL树)
查看>>
一文了解自然语言处理神经史(下)
查看>>
sql定时备份
查看>>
技术干货|深入理解flannel
查看>>
Nancy 寄宿OWin
查看>>