「antd源码分析」Wave——元素点击扩散效果

Wave组件为antd中许多元素提供了点击扩散特效的支持,例如Button、Checkbox和Radio等。

Wave on Button

willReceiveProps 和 shouldComponentUpdate

当父组件重新渲染的时候,会触发子组件componentWillReceivePropsshouldComponentUpdate两个方法的执行。
nextProps会以参数的形式传递给这两个方法,他们之间是否有什么区别与联系?

源码角度分析 - Vue网络请求的时间点

React或Vue如今已经成为前端开发人员必点的技能。之前已经对React进行过分析,今天便要从源码的角度来分析Vue网络请求的时间点。

1、Vue是一个函数,没有constructor

Vue使用单文件组件的模式进行开发,vue-loaderscripttemplate的内容加载后通过vue-template-compiler编译成options供Vue.extend()调用,最终通过$mount方法挂载到DOM。

enzyme模拟checkbox选中与取消

在涉及到checkbox表单元素的单测时,我们会直观的模拟input元素的click事件以触发元素值的改变。但在使用enzyme进行组件单测时却行不通

正确的做法

正确的做法是模拟input元素的change事件,传递想要的target.value。

1
2
3
4
5
6
7
8
9
10
11
12
import React from 'react'
import { mount } from 'enzyme'

it('should change checkbox value', () => {
const changeFn = e => console.log(e.target.checked)
const wrapper = mount(<input type="checkbox" onChange={changeFn} />)
wrapper.find('input').simulate('change', {
target: {
checked: true,
},
})
})

为什么?

enzyme的事件模拟系统并不是我们所想象的那样,操作真实的dom来触发dom级事件而是简单的将simulate转发到props上的相应func。
所以在测试过程中如果我们需要为组件模拟相应的事件,只需要关注组件props上onEventName中的EventName。就像以下情况:

1
2
<input onBlur={handleBlur} /> // simulate('blur')
<div contentEditable onInput={handleInput}></div> // simulate('input')


2019.2.26日更新

enzyme的作者ljharb并不推荐使用 simulate 触发事件的这种写法,因为它有时候会表现的莫名其妙。
作者明确表示我们应该将props的事件监听方法提取出来独立执行,详细见这条Issues

1
2
3
const wrapper = mount(<Slider onDrag={this.handleDrag} />)
const dragFn = wrapper.find('Slider').prop('onDrag')
dragFn()

在less中遍历数组元素

在Less中并没有对数组遍历的原生支持,我们可以通过mixin递归的方式来实现遍历。

1、定义数组元素

1
@colors: red, green, blue, black;

2、获取数组元素长度

1
@length: length(@color);

React网络请求的时间点分析

React无疑是目前最流行的前端View库之一。在业务开发中,开发者经常会因为网络请求时间点的选择而纠结,那么这篇文章一定会给你带来一些帮助。

本文所提到的网络请求主要是组件初始化请求,不包括触发式请求(比如点赞请求、评论请求等)。

从浏览器输入URL到页面加载完毕发生了什么

当我们在浏览器中输入URL后,背后发生了很多巧妙的处理和数据的传递。这个知识点在面试的时候经常被问到,因为它不仅仅考察了求职人员前端技术水平,更查验了他对整个网络通信知识体系的宏观理解。

从零开始搭建Webpack+Vue项目

在使用Vue开发时,我们大多数会使用官方的vue-cli,主要特点包括:

  • 基于webpack构建,带有合理的默认配置
  • 快速零配置原型开发
  • 包含丰富的官方插件集合
    通过它我们可以快速开发一个完整的系统。本文就带领大家从零开始来搭建一个最精简可运行、基于webpack3构建的Vue(2.x)项目。这能让我们了解到webpack和vue在我们日常开发中所处的地位,帮助我们学习或回顾webpack一些配置属性。

纯CSS 实现汉堡式菜单与返回箭头转换动画

汉堡式菜单,由三根平行的直线组成;返回箭头,由两个对称倾斜的箭帽和一条水平直线组成。下面我们就通过使用 CSS 来实现上图的转换效果。
实际效果见banner。

JavaScript原型链继承和Class继承

在JavaScript中如果想要实现继承,都是要借助原型链特性。class是ES6新推出的关键字,但在JavaScript中并不存在类的概念,class关键字只是一种语法糖,其本质还是函数。

class关键字
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×