自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 React源码解析系列(六) —— ReactDOM.render

在React当中,可以导致更新的方法有三种,setState、forceUpdate和ReactDOM.render这三种。当我们初始化应用时,会在入口js文件中调用ReactDOM.render函数去挂载组件。下面让我们来看看这个方法到底做了什么事情。 ReactDOM的代码在: /packages/react-dom/src/client/ReactDOM.js 我们先来看下Reac...

2019-12-23 20:53:32 706

原创 js深拷贝

function deepClone(obj) { var clone = Array.isArray(obj) ? [] : {}; // 数组和对象 if (obj && typeof obj === 'object') { for (var key in obj) { if (obj.hasOwnPropert...

2019-12-23 16:45:11 235

原创 vue-bus插件的实现

vue-bus又叫中央事件总线,是vue中实现跨级组件和兄弟组件之间通信的方式。它的原理是额外定义一个vue的实例,所有的事件监听和触发都是通过这个函数进行的。 什么是插件 Vue提供了插件机制,让我们可以在全局添加一些功能。它可以只是提供几个简单的方法或熟悉,也可以是复杂的组件库。 往Vue中注册插件需要提供一个install方法,如下实例所示: MyPlugin.install = ...

2019-12-23 14:41:39 684

原创 React源码解析系列(五) —— Fiber树

前面几篇文章已经介绍了React相关的api,接下来我们开始进入ReactDOM源码的学习。 本文和大家聊聊react中的虚拟DOM到底是什么?我们来看个例子 <App> <Card> <div>title</div> <div>content</div> </Card> <p>h...

2019-12-21 15:34:36 1030

原创 React源码解析系列(四) —— React剩余的api

现在让我们对React剩下的一些api进行讲解,下面的这些api其实就是每种类型对格式定义,让后续更新流程中能根据这些格式进行渲染。 const React = { Children: { map, forEach, count, toArray, only, }, createRef, Component, PureCompone...

2019-12-20 17:12:31 485

原创 React源码解析系列(三) —— React.Component

我们平常写的class组件都需要继承React.Component这个基类,从而在类都实例中能使用相应的方法。下面让我们看看React.Component这个类究竟长什么样。 Component const emptyObject = {}; function Component(props, context, updater) { this.props = props; this...

2019-12-20 16:37:00 833

原创 React源码解析系列(二) —— React.Children

Children 这个对象提供了帮你处理组件内部props.children的相关方法。这里我们挑map这个方法进行讲解,其它方法逻辑类似。 map方法定义如下: // React.Children.map(this.props.children, (child) => null) function mapChildren(children, func, context) { ...

2019-12-20 16:36:52 368

原创 React源码解析系列(一) —— React.createElement

在开始看react源码前觉得代码量应该会非常庞大,然而在看完react源码后发现实际上react的源码只是一些API和数据结构的定义,真正的更新渲染逻辑是react-dom这块源码里控制的。 本此源码解析系列不包括dev环境下的代码,只对主流程代码进行讲解。 react的源码地址为:react 我们先来看下react的目录结构: 下面让我们看下react对我们暴露的API:/p...

2019-12-20 16:36:42 819

原创 useEffect和useLayoutEffect的区别

这两者的区别可以用2句话概括: useLayoutEffect和平常写的ClassComponent的'componentDidMount'和'componentDidUpdate'同时执行。 useEffect会在本次更新完成后,也就是第1点的方法执行完成后,在开启一次任务调度,在下次任务调度中执行useEffect。 查看源码可以发现useLayoutEffect和componentDid...

2019-12-19 23:44:20 2339

原创 React Hooks如何获取远程数据

让我们来看一个hooks展示数据的简单的例子 import React, { useState } from 'react'; function App() { const [data, setData] = useState({ list: [] }); return ( <ul> {data.list.map(item => ( ...

2019-12-19 23:25:23 580

原创 onload和DOMContentLoaded事件

1.onload事件 ​在页面的所有资源加载完成时,window对象上会触发一个onload事件。此时页面的DOM树已经构建完成,并且完成了所有图片、样式表、脚本等资源也已经加载完成。但是存在的问题是,当资源过多过大时,onload会出现比较严重的延迟问题,严重影响用户体验。 2.DOMContentLoaded事件 对比onload事件,DOMContentLoaded事件就更加合...

2019-12-19 20:23:48 1290

原创 js中generator函数的原理和使用

generator又名生成器函数,它是一个崭新的函数类型,它和标准的普通函数完全不同。通过显式的调用生成器函数,能对应的产生一个新的值。通过多次调用后,产生一组值的序列,直到生成器告诉我们无法在产生新的值了。每当生成器函数产生一个新值后,它的执行状态会被保留,直到下次请求到来,它就会从上次离开的位置恢复执行。 1、如何定义generator函数 下面我们来看一个简单的例子: // 通过在f...

2019-12-17 17:27:38 2266

原创 浅谈js中的闭包、作用域和执行上下文

闭包是JavaScript的的显著特征,使用闭包可以减少代码量来添加高级特性,下面让我们来探讨下什么是闭包。 1、理解闭包 让我们看下一个简单的闭包: var outer = 'outer'; function outerFunc() { console.log(outer); } outerFunc(); 我们在全局作用域中定义了一个变量outer和函数outerFunc,然后...

2019-12-15 15:12:15 332

原创 koa2简单实现

koa2的思想就是把一个个用于处理用户请求的中间件串联起来,并支持异步中间件。下面是一个使用koa2的简单示例 const Koa = require('koa') const app = new Koa() app.use(async (ctx, next) => { console.log('a1') await next() console.log('a2') })...

2019-12-11 23:18:00 340

原创 react-redux的原理及简单实现

前面一篇文章已经讨论了redux的实现原理,如果没看过的小伙伴可以点击链接查看redux的原理及简单实现 下面让我们先看下在react中使用redux的例子: import React from 'react'; import ReactDOM from 'react-dom'; import { createStore, applyMiddleware } from 'redux'; ...

2019-12-10 14:46:43 610

原创 redux的原理及简单实现

1、redux 抛开react,如果只是仅仅使用redux,就像如下示例: const initialState = { name: 'Jack', age: 27, gender: 'boy' }; function reducer(state = initialState, action) { switch(action.type) { ...

2019-12-10 12:24:12 352

原创 Promise简易实现

仅供自己学习记录 const PENDING = Symbol.for('pending'); const FULFILLED = Symbol.for('fulfilled'); const REJECTED = Symbol.for('rejected'); class MyPromise { constructor(func) { this.state = PENDING;...

2019-11-29 18:05:26 166

原创 line-height的继承

当前元素的line-height的值分为几种情况: 当前元素本身设置了line-height值: 设置的值为固定值,如:22px,1em等,则line-height为设置的值; 设置的值为百分比,如:120%,则line-height为120% * 当前元素的font-size; 设置的值为缩放因子,如:1.4,则line-height为1.4 * 当前元素的font-size; 当前元素...

2019-07-05 14:58:07 996

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除