}


*   上述代码中的 input 域包含了一个 ref 属性,该属性声明的回调函数会接收 input 对应的 DOM 元素,我们将其绑定到 this 指针以便在其他的类函数中使用。

*   另外值得一提的是,refs 并不是类组件的专属,函数式组件同样能够利用闭包暂存其值

function CustomForm ({handleSubmit}) {

let inputElement

return (

<form onSubmit={() => handleSubmit(inputElement.value)}>

  <input

    type='text'

    ref={(input) => inputElement = input} />

  <button type='submit'>Submit</button>

</form>

)

}


### [](

)/[详细易懂版本(推荐)/]

**1/. ref设置为普通字符串**

<button ref="myBtn"></button>


*   给**元素**定义ref属性,后续可以通过 this.refs.myBtn 来获取这个真实DOM对象

*   给**组件**定义ref属性,后续可以通过 this.refs.myBtn 来获取这个组件的实例对象

**2/. ref设置为箭头函数**

<button ref="{ (sl) => { this.myBtn = sl } }"></button>



*   给**元素**定义ref属性,后续可以通过 this.myBtn 来获取这个真实DOM对象

*   给**组件**定义ref属性,后续可以通过 this.myBtn 来获取这个组件的实例对象

### [](

)8.React 中有哪些构建组件的方式?

![](https://s2.51cto.com/images/20210912/1631429019677187.jpg)

**有什么区别?**

*   函数组件看似只是一个返回值是DOM结构的函数,其实它的背后是无状态组件的思想。

*   函数组件中,你无法使用State,也无法使用组件的生命周期方法,这就决定了函数组件都是展示性组件,接收Props,渲染DOM,而不关注其他逻辑

*   函数组件中没有this

*   函数组件更容易理解。当你看到一个函数组件时,你就知道它的功能只是接收属性,渲染页面,它不执行与UI无关的逻辑处理,它只是一个**纯函数**。而不用在意它返回的DOM结构有多复杂。

### [](

)9.事件处理函数的this指向问题

![](https://s2.51cto.com/images/20210912/1631429019236726.jpg)

### [](

)/[补充/] 事件处理函数如何传递参数?

*   可以使用 bind 传递参数

*   将事件处理函数交给箭头函数,然后在箭头函数里面调用我自己开始想要调用的那个方法,这时我已经是个普通函数了。

### [](

)/[注意!!!/]

*   如果一个事件处理函数传递了额外的参数,那么事件对象会摸摸的放置在最后一个里面

[](

)2.十万个为什么篇

--------------------------------------------------------------------

### [](

)1.为什么列表循环渲染的key最好不要用index?

*   举例说明

> 变化前数组的值是/[1,2,3,4/],key就是对应的下标:0,1,2,3 变化后数组的值是/[4,3,2,1/],key对应的下标也是:0,1,2,3

*   那么diff算法在变化前的数组找到key =0的值是1,在变化后数组里找到的key=0的值是4

*   因为子元素不一样就重新删除并更新

*   但是如果加了唯一的key,如下:

> 变化前数组的值是/[1,2,3,4/],key就是对应的下标:id0,id1,id2,id3

> 变化后数组的值是/[4,3,2,1/],key对应的下标也是:id3,id2,id1,id0

*   那么diff算法在变化前的数组找到key =id0的值是1,在变化后数组里找到的key=id0的值也是1

*   因为子元素相同,就不删除并更新,只做移动操作,这就提升了性能

### [](

)2.什么是状态提升?

### [](

)3.什么是高阶组件?

### [](

)4.什么是受控组件和非受控组件?

### [](

)5.什么是纯函数?

### [](

)6.什么是上下文Context?

### [](

)7.react中的Portal是什么?

### [](

)8.react16的错误边界(Error Boundaries)是什么?

**除了React之外,我整理的这份《前端校招面试真题解析大全》还包括html,css,JavaScript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。**

文章中所列主要为大纲部分,详细内容可以在文末自行获取哈!

[](

)HTML

---------------------------------------------------------------

*   HTML5新特性,语义化

*   浏览器的标准模式和怪异模式

*   xhtml和html的区别

*   使用data-的好处

*   meta标签

*   canvas

*   HTML废弃的标签

*   IE6 bug,和一些定位写法

*   css js放置位置和原因

*   什么是渐进式渲染

*   html模板语言

*   meta viewport原理

![](https://s2.51cto.com/images/20210912/1631429020261860.jpg)

[](

)CSS

--------------------------------------------------------------

*   盒模型,box-sizing

*   CSS3新特性,伪类,伪元素,锚伪类

*   CSS实现隐藏页面的方式

*   如何实现水平居中和垂直居中。

*   说说position,display

*   请解释/*{box-sizing:border-box;}的作用,并说明使用它的好处

*   浮动元素引起的问题和解决办法?绝对定位和相对定位,元素浮动后的display值

*   link和@import引入css的区别

*   解释一下css3的flexbox,以及适用场景

*   inline和inline-block的区别

*   哪些是块级元素那些是行级元素,各有什么特点

*   grid布局

*   table布局的作用

*   实现两栏布局有哪些方法?

*   css dpi

*   你知道attribute和property的区别么

*   css布局问题?css实现三列布局怎么做?如果中间是自适应又怎么做?

*   流式布局如何实现,响应式布局如何实现

*   移动端布局方案

*   实现三栏布局(圣杯布局,双飞翼布局,flex布局)

*   清除浮动的原理

*   overflow:hidden有什么缺点?

*   padding百分比是相对于父级宽度还是自身的宽度

*   css3动画,transition和animation的区别,animation的属性,加速度,重力的模拟实现

*   CSS 3 如何实现旋转图片(transform: rotate)

*   sass less

*   对移动端开发了解多少?(响应式设计、Zepto;@media、viewport、JavaScript 正则表达式判断平台。)

*   什么是bfc,如何创建bfc?解决什么问题?

*   CSS中的长度单位(px,pt,rem,em,ex,vw,vh,vh,vmin,vmax)

*   CSS 选择器的优先级是怎样的?

*   雪碧图

*   svg

*   媒体查询的原理是什么?

*   CSS 的加载是异步的吗?表现在什么地方?

*   常遇到的浏览器兼容性问题有哪些?常用的hack的技巧

*   外边距合并

*   解释一下“::before”和“:after”中的双冒号和单冒号的区别

![](https://s2.51cto.com/images/20210912/1631429020978816.jpg)

[](

)JS

-------------------------------------------------------------

*   js的基本类型有哪些?引用类型有哪些?null和undefined的区别。

*   如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种)

*   Object是引用类型嘛?引用类型和基本类型有什么区别?哪个是存在堆哪一个是存在栈上面的?

*   JS常见的dom操作api

*   解释一下事件冒泡和事件捕获

*   事件委托(手写例子),事件冒泡和捕获,如何阻止冒泡?如何组织默认事件?

*   对闭包的理解?什么时候构成闭包?闭包的实现方法?闭包的优缺点?

*   this有哪些使用场景?跟C,Java中的this有什么区别?如何改变this的值?

*   call,apply,bind

*   显示原型和隐式原型,手绘原型链,原型链是什么?为什么要有原型链

*   创建对象的多种方式

*   实现继承的多种方式和优缺点

*   new 一个对象具体做了什么

*   手写Ajax,XMLHttpRequest

*   变量提升

*   举例说明一个匿名函数的典型用例

*   指出JS的宿主对象和原生对象的区别,为什么扩展JS内置对象不是好的做法?有哪些内置对象和内置函数?

*   attribute和property的区别

*   document load和document DOMContentLoaded两个事件的区别

*   /=== 和 == , /[/] === /[/], undefined === undefined,/[/] == /[/], undefined == undefined

*   typeof能够得到哪些值

*   什么是“use strict”,好处和坏处

*   函数的作用域是什么?js 的作用域有几种?

*   JS如何实现重载和多态

*   常用的数组api,字符串api

*   原生事件绑定(跨浏览器),dom0和dom2的区别?

*   给定一个元素获取它相对于视图窗口的坐标

*   如何实现图片滚动懒加载

*   js 的字符串类型有哪些方法? 正则表达式的函数怎么使用?

*   深拷贝

*   编写一个通用的事件监听函数

*   web端cookie的设置和获取

*   setTimeout和promise的执行顺序

*   JavaScript 的事件流模型都有什么?

*   navigator对象,location和history

*   js的垃圾回收机制

*   内存泄漏的原因和场景

*   DOM事件的绑定的几种方式

*   DOM事件中target和currentTarget的区别

*   typeof 和 instanceof 区别,instanceof原理

*   js动画和css3动画比较

*   JavaScript 倒计时(setTimeout)

*   js处理异常

*   js的设计模式知道那些

*   轮播图的实现,以及轮播图组件开发,轮播10000张图片过程

*   websocket的工作原理和机制。

*   手指点击可以触控的屏幕时,是什么事件?

*   什么是函数柯里化?以及说一下JS的API有哪些应用到了函数柯里化的实现?(函数柯里化一些了解,以及在/* 函数式编程的应用,最后说了一下JS中bind函数和数组的reduce方法用到了函数柯里化。)

*   JS代码调试  

    ![](https://s2.51cto.com/images/20210912/1631429021823602.jpg)

[](

)框架

-------------------------------------------------------------

*   使用过哪些框架?

*   zepto 和 jquery 是什么关系,有什么联系么?

*   jquery源码如何实现选择器的,为什么$取得的对象要设计成数组的形式,这样设计的目的是什么

*   jquery如何绑定事件,有几种类型和区别

*   什么是MVVM,MVC,MVP

*   Vue和Angular的双向数据绑定原理

*   Vue,Angular组件间通信以及路由原理

*   react和vue的生命周期

*   react和vue的虚拟dom以及diff算法

*   vue的observer,watcher,compile

*   react和angular分别用在什么样的业务吗?性能方面和MVC层面上的区别

*   jQuery对象和JS的Element有什么区别

*   jQuery对象是怎么实现的

*   jQuery除了它封装了一些方法外,还有什么值得我们去学习和使用的?

*   jQuery的$(‘xxx’)做了什么事情

*   介绍一下bootstrap的栅格系统是如何实现的

![](https://s2.51cto.com/images/20210912/1631429021349651.jpg)

[](

)浏览器相关

----------------------------------------------------------------

*   跨域,为什么JS会对跨域做出限制

*   前端安全:xss,csrf…

*   浏览器怎么加载页面的?script脚本阻塞有什么解决方法?defer和async的区别?

*   浏览器强缓存和协商缓存

*   浏览器的全局变量有哪些

*   浏览器同一时间能够从一个域名下载多少资源

*   按需加载,不同页面的元素判断标准

*   web存储、cookies、localstroge等的使用和区别

*   浏览器的内核

*   如何实现缓存机制?(从200缓存,到cache到etag再到)

*   说一下200和304的理解和区别

*   什么是预加载、懒加载

*   一个 XMLHttpRequest 实例有多少种状态?

*   dns解析原理,输入网址后如何查找服务器

*   服务器如何知道你?

*   浏览器渲染过程

*   ie的某些兼容性问题

*   session