对react的理解

是什么

React 是一个用于构建用户界面的 JavaScript 库。

能干什么

可以通过组件化的方式构建大型的,快速响应的大型web应用

如何做

声明式

React 使用jsx实现声明式,使创建交互式 UI 变得轻而易举。

以声明式编写 UI,可以让你的代码更加可靠,且方便调试。

(另外一种是命令式--直接操作dom)

组件化

创建拥有各自状态的组件,再由这些组件构成更加复杂的 UI。--高内聚-低耦合

组件逻辑使用 JavaScript 编写而非模版,因此你可以轻松地在应用中传递数据,并使得状态与 DOM 分离。

一次学习,随处编写

虚拟Dom实现跨平台

无论你现在正在使用什么技术栈,你都可以随时引入 React 来开发新特性,而不需要重写现有代码。

React 还可以使用 Node 进行服务器渲染,或使用 React Native 开发原生移动应用。

缺点

没有官方系统解决方案,过于灵活,需要第三方库---客户端-服务端通信,react-redux,路由,表单等

为什么react引入jsx

是什么

jsx是一个js的语法扩展,可以很好的描述UI,

是react.createElement的语法糖

jsx被@babel/preset-react插件编译为createElement()方法
createElement() -> react元素(普通的js对象)

为什么

为了实现声明式,代码结构更加简洁,可读性强

不许引入新的语法和概念,用js写

比如:angular就使用了基于HTML的模板

对虚拟DOM的理解

react.createElement函数返回的就是一个虚拟DOM

虚拟DOM就是一个描述真实DOM的纯js对象

过程:

每当底层数据发生改变时,整个 UI 都将在 Virtual DOM 描述中重新渲染。

然后计算之前 DOM 表示与新表示的之间的差异。

完成计算后,将只用实际更改的内容更新 real DOM。

React与Angular有何不同?

   React Angular 
   只有 MVC 中的 View  完整的 MVC
   可以在服务器端渲染  客户端渲染
   使用 virtual DOM  使用 real DOM
   单向数据绑定  双向数据绑定
   编译时调试  运行时调试
   Facebook  Google

React中的合成事件是什么?

合成事件是围绕浏览器原生事件充当跨浏览器包装器的对象。它们将不同浏览器的行为合并为一个 API。这样做是为了确保事件在不同浏览器中显示一致的属性。

箭头函数

类组件中 this
事件中的this是undefined   render()中的this指向实例-就可以用了
解决
+ 箭头函数:自身不绑定this,指向外部环境 <button onClick={() => this.add()}> + </button>
+ Function.prototype.bind() 将事件中的this与组件实例绑定 构造函数(Constructor)中的this指向调用该构造函数所创建的实例对象(instance)。
+ 事件改为用箭头函数实现

组件通讯

- 父 => 子 属性传递
- 子 => 父 回调函数
- 兄弟 => 兄弟 由公共父组件管理状态
- 跨组件传递数据 Context
 

组件生命周期 类组件才有

创建时

- constructor() 初始化state
- render() 每次组件渲染都会触发(不能用setState)
- componentDidMount() DOM渲染完成后 1发送网络请求 2DOM操作

更新时

- this.setState()
- this.forceUpdate()
- 组件接收的props发生变化
- 以上都会触发render()更新
componentDidUpdate() render()后 1发送网络请求 2DOM操作

卸载时

- componentWillUNmount() 执行清理 如定时器

React 中 key 的重要性是什么?

key 用于识别唯一的 Virtual DOM 元素及其驱动 UI 的相应数据。它们通过回收 DOM 中当前所有的元素来帮助 React 优化渲染。

这些 key 必须是唯一的数字或字符串,React 只是重新排序元素而不是重新渲染它们。这可以提高应用程序的性能。

React hook

Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。
Hook 是什么? Hook 是一个特殊的函数,它可以让你“钩入” React 的特性。
什么时候我会用 Hook? 如果你在编写函数组件并意识到需要向其添加一些 state,以前的做法是必须将其它转化为 class。现在你可以在现有的函数组件中使用 Hook。
 
在函数组件中,我们没有 this,所以我们不能分配或读取 this.state。我们直接在组件中调用 useState Hook
 
 
useState 是允许你在 React 函数组件中添加 state 的 Hook。
Effect Hook 可以让你在函数组件中执行副作用操作数据获取,设置订阅以及手动更改 React 组件中的 DOM 都属于副作用。
 
useEffect 做了什么? 通过使用这个 Hook,你可以告诉 React 组件需要在渲染后执行某些操作。
React 会保存你传递的函数(我们将它称之为 “effect”),并且在执行 DOM 更新之后调用它。

面试题-react的更多相关文章

  1. 前端面试题(react)

    React 组件生命周期 在本章节中我们将讨论 React 组件的生命周期. 组件的生命周期可分成三个状态: Mounting:已插入真实 DOM Updating:正在被重新渲染 Unmountin ...

  2. 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)

    写在前面 参考答案及资源在看云平台发布,如果大家想领取资源以及查看答案,可直接前去购买.一次购买永久可看,文档长期更新!有什么意见与建议欢迎您及时联系作者或留言回复! 文档描述 本文是关注微信小程序的 ...

  3. React中父子组件数据传递

    Vue.js中父子组件数据传递:Props Down ,  Events Up Angular中父子组件数据传递:Props Down,  Events  Up React中父子组件数据传递:Prop ...

  4. 使用angular/react/vue实现相同的面试题组件

    面试题要求如下所示 1.angular: <!DOCTYPE html><html lang="en"><head> <meta char ...

  5. React 精要面试题讲解(五) 高阶组件真解

    说明与目录 在学习本章内容之前,最好是具备react中'插槽(children)'及'组合与继承' 这两点的知识积累. 详情请参照React 精要面试题讲解(四) 组合与继承不得不说的秘密. 哦不好意 ...

  6. React 精要面试题讲解(二) 组件间通信详解

    单向数据流与组件间通信 上文我们已经讲述过,react 单向数据流的原理和简单模拟实现.结合上文中的代码,我们来进行这节面试题的讲解: react中的组件间通信. 那么,首先我们把看上文中的原生js代 ...

  7. 必须要会的 50 个 React 面试题

    翻译:疯狂的技术宅 原文:www.edureka.co/blog/interv… 如果你是一位有抱负的前端程序员并准备面试,那么这篇文章很适合你.本文是你学习和面试 React 所需知识的完美指南. ...

  8. React 精要面试题讲解(一) 单向数据流

    react 单向数据流概念 'react框架是怎样的数据流向?'||'react单向数据流是怎样的概念 ?' 解答这个问题之前,我们首先得知道,js框架是个怎样的概念. 框架:具备一定**编程思想** ...

  9. 前端面试题整理—React篇

    1.说一下React React是Facebook 开发的前端JavaScript库 V层:react并不是完整的MVC框架,而是MVC中的C层 虚拟DOM:react引入虚拟DOM,每当数据变化通过 ...

  10. React面试题

    React 简述下React的生命周期,性能优化在哪个生命周期,ajax操作在哪个生命周期 React中key的作用是什么 什么是虚拟DOM diff算法原理 React中refs的作用是什么

随机推荐

  1. 面向对象程序设计第三次blog

    一.前言 第六次题目集总结-- 题量:较少 难度:较高 知识点: 判断输入内容 提取输入的有效信息并进行计算 总结:题目比较难,题量较少. 第七次题目集总结-- 题量:较少 难度:一般 知识点: 输入 ...

  2. 下载nvm并安装vue环境

    nvm下载地址 https://github.com/coreybutler/nvm-windows/releases 直接下载 nvm-setup.zip 到任意文件夹下,双击安装 安装过程会提示 ...

  3. Docker之Nginx保姆级别安装

    Docker之Nginx保姆级别安装: 如果觉得样式不好:跳转即可 http://www.lifengying.site/(md文件复制过来有些样式会不一样) 学英语网站项目:自己先保证Redis.N ...

  4. 2022-05-24内部群每日三题-清辉PMP

    1.一家公司具有一项变更控制委员会(CCB)政策,规定其每月举行一次会议来评估和审查变更请求.一个项目正在执行过程中,由于时间表和目标较为激进,需要更快的响应时间.项目经理应该怎么做? A.更新风险登 ...

  5. 开启MySQL数据库远程连接

    为了使其余用户/计算机能访问SQL数据库,需对SQL Server进行以下配置.有以下两种方法: 方法一:bat命令修改. 新建.txt文件,添加以下内容,保存后再修改为.bat,双击.bat文件. ...

  6. unity 阿拉伯数字转中文汉字

    直接调用即可 代码如下: using System; using System.Collections; using System.Collections.Generic; using System. ...

  7. js 防抖

    // 防抖 作用:防止重复触发事件 var count = 1; var container = document.getElementById('container'); function getU ...

  8. T137288 铸星

    有以下三种情况: 只有一个数,直接输出. 有正数也有复数,那就先让负数撞正数得到更小的负数,直到剩下最后一个正数撞所有的负数,答案是所有数的绝对值之和. 仅有正数或者仅有负数,就先找一对不相等的相邻的 ...

  9. Spyder无法使用搜狗输入中文的解决办法

    Ubuntu 18.04 LTS系统下,spyder4编辑器无法使用搜狗输入中文.系统输入法为fcitx+搜狗拼音,chrome浏览器无此问题.网上答案: Spyder (以及其他PyQt程序) 无法 ...

  10. python 成功解决import librosa出错问题

    在做音频处理时,用到了librosa这个库,但是一直在报错,一开始以为代码错误,后来发现import的时候就已经出错了. 我给他卸载了重新安装,结果是一样的,报错如下: Traceback (most ...