对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. Ubuntu docker安装、验证、卸载

    卸载Docker CE 卸载Docker CE软件包: sudo apt-get purge docker-ce 主机上的图像,容器,卷或自定义配置文件不会自动删除.要删除所有图像,容器和卷: sud ...

  2. VUE学习-过渡 & 动画

    过渡 & 动画 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括以下工具: 在 CSS 过渡和动画中自动应用 class 在过渡钩子函数中使用 JavaScrip ...

  3. myql数据库新建之后,本地可以访问,远程访问不了

    通过如下命令去修改: use mysql; update user set user.Host='%' where user.User='root'; flush privileges;

  4. 浅谈storm

    storm分布式,可容错的实时计算框架,低延迟能做到毫秒级的响应,storm进程是常驻内存,Hadoop是不断启停的,storm中的数据不经过磁盘,都在内存中,处理完成后就没有了,但是可以写到数据库中 ...

  5. allure+testng遇到的一些问题

    java+testng+allure 听说allure报告,"很好看",决定引入. 首先看allure官网,需要在pom.xml中引入包 文档:https://docs.qamet ...

  6. 《CSOL大灾变》Mobile移植记录——购买区域

    在CSOL大灾变模式中,购买武器只能出现在特定区域,如下:    这里可以通过添加一些不渲染的BOX(如图中的蓝色BOX)作为触发器,然后检测玩家与之触发后才能弹出购买菜单. 在JmonkeyEngi ...

  7. excel快速生成相同内容

    先选中你所需要的单元格,如图所示: 输入自己想要的字符,然后按ctrl+enter,如图所示:

  8. 【Go】类型转换

    字符串转int32 package main import ( "fmt" "strconv" ) func main() { str := "123 ...

  9. springboot Elasticsearch 实体创建索引设置Date 类型字段失败

    springboot Elasticsearch 实体创建索引设置Date 类型字段失败,需添加以下注解 @Field(type = FieldType.Date, format = DateForm ...

  10. webpack5 与webpack4 之间差别

    1.terserPlugin webpack4 上需要下载安装 terser-webpack-plugin 插件,并且需要配置,webpack5 上生产模式下默认开启压缩,开发环境也可以按如下配置 / ...