React

1.说说对 React 的理解? 有哪些特性

 React 是用于构建用户界面的 JavaScript 库,提供了 UI 层面的解决方案,遵循组件设计模式/生命式编程和函数式编程概念,以使前端应用程序更高效,使用虚拟DOM来有效操作DOM,遵循从高阶组件到低阶组件的单向数据流,帮助我们将界面成了各个独立的一个组件,这些组件之间可以组合/嵌套/构成整体页面

特性:

  • JSX语法
  • 单向数据绑定
  • 虚拟DOM
  • 声明式编程
  • 组件化 Component

优势: 

  • 高效灵活
  • 声明式设计,简单使用
  • 组件式开发,提高代码复用率
  • 单向响应的数据流会比双向绑定更安全,速度快
 2.区分Real DOM 和 Virtual DOM

Real DOM

  • Real DOM,真实的DOM,文档对象模型,是一个结构化文本的抽象,在页面渲染出的每一个节点都是一个真实的DOM结构
  • 更新缓慢
  • 可以直接更新 HTML
  • 如果元素更新,则创建新DOM
  • DOM 操作代价更高
  • 消耗的内存较多

Virtual DOM

  • Virtual DOM 本质上是以 JavaScript 对象形式存在的对 DOM 的描述,虚拟DOM操作真实DOM
  • 更新更快
  • 无法直接更新 HTML
  • 如果元素更新,则更新 JSX
  • Dom操作更简单
  • 内存消耗少
3.什么 JSX , JSX 的特性 

JSX 是JavaScript XML的缩写,基于ECMAScript的一种新特性,一种定义带属性树结构的语法

特性:

  • 自定义组件名 首字母大写
  • 嵌套, 在 render 函数中 return返回的只能包含一个顶层标签
  • 求值表达式, JSX基本语法规则, html 标签使用 HTML 规则解析; 代码块 使用 JS 规则解析
  • 驼峰命名法
  • class => className
  • JXS 允许直接在模板中插入 JS 变量, 如果变量是数组 => 展开数组
  • 在 JSX 中插入用户输入是安全的ReactDom在渲染前,转义 JSX 中的任意值,渲染前,所有值都会被转化为字符串形式,预防 XSS 攻击
 4.类组件与函数式组件的区别

类组件

  • 使用函数/类声明组件,不能修改它自己的 props
  • 所有 React 组件必须是纯函数
  • React 是单向数据流,父组件更改了属性,子组件视图会更新
  • 属性 props 是外界传递过来的, 状态 state 是自身的, 状态可以修改
  • 组件的属性和状态更改都会更新视图

函数式组件

  • 函数组件接收了一个单一的 props 对象 并返回了一个 React 对象
  • 函数组件 比 类组件 性能高, 因为类组件需要实例化,函数式组件直接执行函数取返回结果.
5.Virtual DOM 的工作原理

Virtual DOM 是一个轻量级的 JavaScript 对象,它最初只是 real DOM 的副本。它是一个节点树,它将元素、以及它们的属性和内容作为对象及其属性。 React 的渲染函数从 React 组件中创建一个节点树。然后它响应数据模型中的变化来更新该树,该变化是由用户或系统完成的各种动作引起的。

Virtual DOM 工作过程有三个简单的步骤:

  1. 当底层数据发生改变时,整个 UI 都将在 Virtual DOM 描述中重新渲染。
  2. 计算之前 DOM 和之后的差异。
  3. 完成计算后,将只用实际更改的内容更新 Real DOM。
 6.详细解释 React 组件的生命周期方法
  1. componentWillMount() - 在渲染之前执行, 客户端/服务端都会执行
  2. componentDidMount() - 在第一次渲染后在客户端执行
  3. componentWillReceiveProps() - 当从父类接收到 props 并且在调用另一个渲染器之前调用
  4. shouldComponentUpdate() - 根据特定条件返回 true / false false阻止render渲染 默认返回true => 更新组件 在这个钩子周期中做优化,提高性能
  5. componentWillUpdate() - 在 Dom 渲染之前调用
  6. componentDidUpdate() - 在渲染发生后立即调用
  7. componentWillUnmount() - 从Dom卸载组件后调用,清理空间内存
7.react 组件之间如何通信
  • 父子:父传子:props; 子传父:子调用父组件中的函数并传参;
  • 兄弟:利用redux实现和利用父组件
  • 所有关系都通用的方法:利用PubSub.js订阅
8.说说对React Hooks的理解?解决了什么问题?

Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性,因此,现在的函数组件也可以是有状态的组件,内部也可以维护自身的状态以及做一些逻辑方面的处理

最常见的hooks有:useState、useEffect

hooks的出现,使函数组件的功能得到了扩充,拥有了类组件相似的功能;

9.React context是什么?

当你不想在组件树中通过逐层传递props或者state的方式来传递数据时,可以使用Context来实现跨层级的组件数据传递.

10.为什么 React Router 中使用 Switch 关键字 ?

router和switch对于路由的渲染策略不同:

  • 对router来说,如果有的链接既可以被路由A匹配,又可以被路由B匹配,那么Router会同时渲染它们
  • switch只会渲染符合条件的第一个路径,避免重复匹配
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值