每天几个前端小知识

简介: 每天几个前端小知识

React



8.调用setState之后发生了什么?


React在调用setstate后,react会将传入的参数对象和组件当前的状态合并,触发调和过程,在调和过程中,react会根据新的状态构建react元素树重新渲染整个UI界面,在得到元素树之后,react会自动计算新老节点的差异,根据差异对界面进行最小化重新渲染


9.react生命周期函数


componentWillMount组件渲染之前调用

componentDidMount在第一次渲染之后调用

componentWillReceiveProps在组件接收到一个新的props时调用

shouldComponentUpdate判断组件是否更新html

componentWillupdate组件即将更新html时调用

componentDidupdate在组件完成更新后立即调用

componentWillUnmount在组件移除之前调用


10.为什么虚拟dom会提高性能?(必考)


虚拟dom相当于在js和真实dom中间加了一个缓存,利用dom

diff算法避免了没有必要的dom操作,从而提高性能


11.(组件的)状态(state)和属性(props)之间有何不同


State与props区别

Props是一个从外部传进组件的参数,主要作用就是父组件向子组件传递数据,但是props对于使用它的组件来说是只读的,一旦赋值不能修改,只能通过外部组件主动传入新的props来重新渲染子组件

State一个组件的显示形态可以由数据状态和外部参数决定,外部参数是

props,数据状态就是state,首先,在组件初始化的时候,用this.state

给组件设定一个初始的state,在第一次渲染的时候就会用这个数据来渲

染组件,state不同于props一点时,state可以修改,通过this.setState()方法来修改state


12.shouldComponentUpdate是做什么的


这个react生命周期钩子函数是来解决这个问题:

在更新数据的时候用setState修改整个数据,数据变了之后,遍历的时候所有内容都要被重新渲染,数据量少还好,数据量大就会严重影响性


解决办法:

1.shouldcomponentupdate在渲染前进行判断组件是否更新,更新了再渲染

2.purecomponent(纯组件)省去了虚拟dom生成和对比的过程在类组件中使用

3.react.memo()类似于纯组件在无状态组件中使用


13.reactdiff原理


它是基于三个策略:

treediffwebUI中dom节点跨层级的移动操作特别少,可以忽略不计
componentdiff拥有相同类的两个组件将会生成相似的树形结构,拥有

不同类的两个组件会生成不同的树形结构elementdiff对于同一层级的一组子节点,他们可以通过唯一的id进行


区分


14.何为受控组件


React负责渲染表单的组件,值是来自于state控制的,输入表单元素称为受控组件


15.调用super(props)的目的是什么


Super()调用父类的构造方法,有super,组件才有自己的this,在组件全局中都可以使用this,如果只是constructor而不执行super,之后的this都是错的,super继承父组件的this


16.React中构建组件的方式


自定义组件:函数组件或者无状态组件组件首字母大写

类组件:一个类组件必须实现一个render方法,这个方法必须返回一个jsx元素,要用一个外层的元素把所有内容包裹起来


17.简述flux思想


Flux的最大特点,就是数据的"单向流动"。

1.用户访问View

2.View发出用户的Action

3.Dispatcher收到Action,要求Store进行相应的更新

4.Store更新后,发出一个"change"事件


18.React项目用过什么脚手架?Mern?Yeoman?


Mern:MERN是脚手架的工具,它可以很容易地使用Mongo,Express,ReactandNodeJS生成同构JS应用。它最大限度地减少安装时间,并得到您使用的成熟技术来加速开发。


19.应该在React组件的何处发起Ajax请求?


在React组件中,应该在componentDidMount中发起网络请求。这个方法会在组件第一次“挂载”(被添加到DOM)时执行,在组件的生命周期中仅会执行一次。更重要的是,你不能保证在组件挂载之前Ajax请求已经完成,如果是这样,也就意味着你将尝试在一个未挂载的组件上调用setState,这将不起作用。在componentDidMount中发起网络请求将保证这有一个组件可以更新了。


20.何为高阶组件(higherordercomponent)?


高阶组件是一个以组件为参数并返回一个新组件的函数。HOC运行你重用代码、逻辑和引导抽象。最常见的可能是Redux的connect函数。除了简单分享工具库和简单的组合,HOC最好的方式是共享React组件之间的行为。如果你发现你在不同的地方写了大量代码来做同一件事时,就应该考虑将代码重构为可重用的HOC。

目录
相关文章
|
7月前
|
前端开发
前端必看的8个HTML+CSS技巧 (2)
前端必看的8个HTML+CSS技巧 (2)
|
2月前
|
前端开发 JavaScript 数据可视化
前端实用网站
【10月更文挑战第3天】
21 1
|
7月前
|
前端开发 程序员 数据处理
关于前端的一些
关于前端的一些
47 1
|
7月前
|
移动开发 前端开发 JavaScript
前端
前端
52 0
|
7月前
|
SQL 安全 前端开发
前端安全方面
前端安全方面
52 0
|
编解码 移动开发 前端开发
什么是前端?
一、什么是前端 前端是指网页开发中与用户交互直接相关的部分,包括网页的设计、布局、交互以及与后端进行数据交互的功能。前端开发主要使用HTML、CSS和JavaScript等技术来实现网页的展示和交互功能。前端开发人员通常负责将设计师提供的网页设计转化为网页代码,并与后端开发人员进行协作,实现网页的功能和数据交互。前端开发的目标是提供用户友好的界面和良好的用户体验。 二、前端的特点 前端开发具有以下几个特点: 1. 用户界面设计:前端开发主要负责网页的设计和布局,包括页面的样式、排版、色彩等,以及用户交互的设计。前端开发人员需要具备一定的美学和设计能力,以提供用户友好的界面和良好的用户体验。
297 0
|
7月前
|
资源调度 前端开发 JavaScript
前端 (4)
前端 (4)
34 0
|
编解码 移动开发 前端开发
什么是前端,前端是什么?
什么是前端,前端是什么?
185 0
|
XML 前端开发 JavaScript
前端三剑客
前端三剑客
166 0
|
前端开发 JavaScript UED
关于前端的一些思考
前端开发作为Web前端的重要组成部分,越来越受到关注。为了在竞争激烈的市场中脱颖而出,我们需要不断创新并进行原创性的开发。
100 0