美文网首页
react 面试

react 面试

作者: 豆腐先生就是我 | 来源:发表于2019-06-11 13:21 被阅读0次

react

redux (所有数据都放入redux管理)

1、redux中间件原理(middleware)

  • 中间件提供第三方插件的模式,自定义拦截 action -> reducer 的过程。

  • 变为 action -> middlewares -> reducer。

  • 这种机制可以让我们改变数据流,实现如异步 action ,action 过滤,日志输出,异常报告等功能

  • 常见的中间件:

redux-logger:提供日志输出

redux-thunk(async/await):处理异步操作

redux-promise:处理异步操作,actionCreator的返回值是promise

  • middleware作用:
    改装dispatch

2、redux有什么缺点

  1. 一个组件所需要的数据,必须由父组件(provider)传过来,而不能像flux中直接从store取

  2. 当一个组件相关数据更新时,即使父组件不需要用到这个组件,父组件还是会重新render,可能会有效率影响,或者需要写复杂的shouldComponentUpdate进行判断。

react组件的划分业务组件技术组件?

  1. 根据组件的职责通常把组件分为UI组件和容器组件。

  2. UI 组件负责 UI 的呈现,容器组件负责管理数据和逻辑。

  3. 两者通过React-Redux 提供connect方法联系起来。

具体使用可以参照如下链接:http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_three_react-redux.html

react生命周期函数

1. react性能优化是哪个周期函数?

  • shouldComponentUpdate 这个方法用来判断是否需要调用render方法重新描绘dom。

  • 因为dom的描绘非常消耗性能,如果我们能在shouldComponentUpdate方法中能够写出更优化的dom diff算法,可以极大的提高性能。

为什么虚拟dom会提高性能?

虚拟dom相当于在js和真实dom中间加了一个缓存,利用dom diff算法避免了没有必要的dom操作,从而提高性能。

具体实现步骤如下:

  • 用 JavaScript 对象结构表示 DOM 树的结构;然后用这个树构建一个真正的 DOM 树,插到文档当中

  • 状态变更的时候,重新构造一棵新的对象树。然后用新的树和旧的树进行比较,记录两棵树差异把2所记录的差异应用到步骤1所构建的真正的DOM树上,视图就更新了

react性能优化方案

  • key值相同, 就直接复用, 不用再创建虚拟DOM对象

jsx

什么是 JSX 和我们怎样在 JavaScript 代码中书写它 —— 浏览器是如何识别它的?

  • JSX 只是一种 Facebook 普及的标记语法,受益于 Babel/TSC 这些工具

  • 我们能够以一种更令赏心悦目的方式书写 React.createElement 调用。

JSX 的技术原理以及随之而来的限制;为什么甚至在我们的代码并没有使用 React 的情况下,也需要在文件顶部 import React from 'react';

为什么JSX中的组件名要以大写字母开头?

React 如何知道要渲染的是组件还是 HTML 元素就够了。

解释下“状态提升(Context)”理念吗?

  • 它允许你在兄弟组件间传递数据
  • 它允许你拥有更多纯展示组件,更易复用

如果不能在组件间传递数据,你怎样给多级组件传递数据:

简述flux 思想

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

1.用户访问 View

2.View 发出用户的 Action

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

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

5.View 收到"change"事件后,更新页面

受控组件与非受控组件 :

受控组件:

在HTML中,标签<input>、<textarea>、<select>的值的改变通常是根据用户输入进行更新。在React中,可变状态通常保存在组件的状态属性中,并且只能使用 setState() 更新,而呈现表单的React组件也控制着在后续用户输入时该表单中发生的情况,以这种由React控制的输入表单元素而改变其值的方式,称为:“受控组件”。

非受控组件:

表单数据由DOM本身处理。即不受setState()的控制,与传统的HTML表单输入相似,input输入值即显示最新值(使用 ref从DOM获取表单值)

用法:

受控和非受控元素都有其优点,根据具体情况选择。如果表单在UI反馈方面非常简单,则对ref进行控制是完全正确的,即使用非受控组件

diff 算法:

immutale + redux + pureComponent对项目性能优化

调用 setState, 会发生什么

  • 两种开发写法 :
// 对象时简写:
setSate({
    age: this.state.age + 1
})
browser's 

// 官方推荐:
setState(()=>{
    age: this.state.age + 1
})
  • 由于setState是异步更新的所以, 当连续点击更新触发setState, 导致数据变化过多
// 解决方法 :
setState((prevState)=>{
    age: this.state.age + 1
}, ()=>{
    
})

  • setState第二回调, 是在setState的第一个回调页面数据渲染后再调用

相关文章

  • React面试题总结

    React面试题总结内容主要包括基础知识,React 组件,React Redux,React 路由。 基本知识 ...

  • .

    进击的react - https://zhuanlan.zhihu.com/advancing-react 面试中...

  • react面试题(第一版)

    react面试题(第一版) 1. react是什么 react 是 Facebook 开发的前端JavaScrip...

  • react-hooks

    前置 学习面试视频 总结react hooks react-hooks react-hooks为函数组件提供了一些...

  • 如何从零入门React?实战做个FM应用吧

    面试造航母,工作拧螺丝,新公司面试技术官要求会react技术栈。 航母问:有使用过React么?我答:没。航母问:...

  • React常用面试题分析

    React常用面试题分析 React中调用setState之后发生了什么事情? React会将当前传入的参数对象与...

  • react 面试

    react redux (所有数据都放入redux管理) 1、redux中间件原理(middleware) 中间件...

  • React面试

    整理了在react前端面试中,常会问到的东西,不仅限于react,还包括前端常用的基础 1.关于react框架 谈...

  • react面试

    生命周期https://www.jianshu.com/p/b331d0e4b398[https://www.ji...

  • react 面试

    jsx hooks 组件尽量写成纯函数,如果需要外部功能和副作用,就用钩子把外部代码"钩"进来。 useSta...

网友评论

      本文标题:react 面试

      本文链接:https://www.haomeiwen.com/subject/buzffctx.html