1.React 中 refs 的作用是什么?


Refs 是 React 提供给我们的安全访问 DOM 元素或者某个组件实例的句柄。
我们可以为元素添加 ref 属性然后在回调函数中接受该元素在 DOM 树中的句柄,
该值会作为回调函数的第一个参数返回:class CustomForm extends Component {handleSubmit = () => {console.log("Input Value: ", this.input.value)}render () {return (<form onSubmit={this.handleSubmit}><inputtype='text'ref={(input) => this.input = input} /><button type='submit'>Submit</button></form>)}
}上述代码中的 input 域包含了一个 ref 属性,
该属性声明的回调函数会接收 input 对应的 DOM 元素,
我们将其绑定到 this 指针以便在其他的类函数中使用。
另外值得一提的是,refs 并不是类组件的专属,
函数式组件同样能够利用闭包暂存其值:function CustomForm ({handleSubmit}) {let inputElementreturn (<form onSubmit={() => handleSubmit(inputElement.value)}><inputtype='text'ref={(input) => inputElement = input} /><button type='submit'>Submit</button></form>)
}复制代码

2.展示组件(Presentational component)和容器组件(Container component)之间有何不同?


展示组件关心组件看起来是什么。
展示专门通过 props 接受数据和回调,
并且几乎不会有自身的状态,
但当展示组件拥有自身的状态时,
通常也只关心 UI 状态而不是数据的状态。
容器组件则更关心组件是如何运作的。
容器组件会为展示组件或者其它容器组件提供数据和行为(behavior),
它们会调用 Flux actions,
并将其作为回调提供给展示组件。
容器组件经常是有状态的,
因为它们是(其它组件的)数据源。复制代码

3.类组件(Class component)和函数式组件(Functional component)之间有何不同?


类组件不仅允许你使用更多额外的功能,
如组件自身的状态和生命周期钩子,
也能使组件直接访问 store 并维持状态
当组件仅是接收 props,
并将组件自身渲染到页面时,
该组件就是一个 '无状态组件(stateless component)',
可以使用一个纯函数来创建这样的组件。
这种组件也被称为哑组件(dumb components)或展示组件复制代码

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


State 是一种数据结构,
用于组件挂载时所需数据的默认值。
State 可能会随着时间的推移而发生突变,
但多数时候是作为用户事件行为的结果。
Props(properties 的简写)则是组件的配置。
props 由父组件传递给子组件,
并且就子组件而言,
props 是不可变的(immutable)。
组件不能改变自身的 props,
但是可以把其子组件的 props 放在一起(统一管理)。
Props 也不仅仅是数据--回调函数也可以通过 props 传递。复制代码

5.何为受控组件(controlled component)?


在 HTML 中,类似 <input>,
<textarea> 和 <select> 这样的表单元素会维护自身的状态,
并基于用户的输入来更新。
当用户提交表单时,
前面提到的元素的值将随表单一起被发送。
但在 React 中会有些不同,
包含表单元素的组件将会在 state 中追踪输入的值,
并且每次调用回调函数时,
如 onChange 会更新 state,重新渲染组件。
一个输入表单元素,
它的值通过 React 的这种方式来控制,
这样的元素就被称为"受控元素"。复制代码

撩课-Web大前端每天5道面试题-Day35相关推荐

  1. 撩课-Web大前端每天5道面试题-Day7

    1. 你能描述一下渐进增强和优雅降级之间的不同吗? 定义: 优雅降级(graceful degradation): 一开始就构建站点的完整功能, 然后针对浏览器测试和修复渐进增强(progressiv ...

  2. 撩课-Web大前端每天5道面试题-Day39

    1.谈谈你对webpack的看法? WebPack 是一个模块打包工具, 你可以使用WebPack管理你的模块依赖, 并编绎输出模块们所需的静态文件. 它能够很好地管理. 打包Web开发中所用到的`H ...

  3. 撩课-Web大前端每天5道面试题-Day12

    1. 请写出至少5个html5新增的标签,并说明其语义和应用场景? section:定义文档中的一个章节;nav:定义只包含导航链接的章节; header:定义页面或章节的头部; 它经常包含 logo ...

  4. 撩课-Web大前端每天5道面试题-Day38

    1.JavaScript实现二分法查找? 二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法. 查找过程可以分为以下步骤: (1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是 ...

  5. 撩课-Web大前端每天5道面试题-Day24

    1.下面的代码将输出什么? for (var i = 0; i < 5; i++) {setTimeout(function() { console.log(i); }, i * 1000 ); ...

  6. 撩课-Web大前端每天5道面试题-Day40

    1.git fetch和git pull的区别? git pull:相当于是从远程获取最新版本并merge到本地git fetch:相当于是从远程获取最新版本到本地,不会自动merge 复制代码 2. ...

  7. 02.Web大前端时代之:HTML5+CSS3入门系列~H5结构元素

    Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 1.结构元素 可以理解为语义话标记,比如:以前这么写&l ...

  8. 04. Web大前端时代之:HTML5+CSS3入门系列~HTML5 表单

    Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 一.input新增类型: 1.tel:输入类型用于应该包 ...

  9. 前端—每天5道面试题(十二)

    前端-每天5道面试题(十二) 每天进步1% 不多 就1% 一.CSS3 新特性有哪些 1.颜色:新增 RGBA,HSLA 模式 2. 文字阴影(text-shadow.) 3.边框: 圆角(borde ...

最新文章

  1. 星云精准测试之用例魔方
  2. Java编译型语言还是解释型语言
  3. 开户oracle监听,R12:银行账户开户人?
  4. KOFLive Postmortem
  5. Java开发环境!为什么MySQL不推荐使用uuid作为主键
  6. 图片圆角边框自适应宽高(深夜原创)
  7. 基础才是重中之重~类是怎么执行的
  8. FDA批准首个无需人类医生指导的AI,可独立诊断眼科疾病
  9. Laravel后台 + AngularJS前端 的网站构建与维护
  10. python执行速度太慢为什么还_为什么你写的Python运行的那么慢呢?
  11. java开发使用jbpm视频_最新jbpm4工作流开发实战视频教程 - 框架技术 - Java - 私塾在线 - 只做精品视频课程服务...
  12. 网络游戏防沉迷的理想与现实
  13. tbschedule介绍
  14. RTMP 两种方式推流:推H.264、ACC和推FLV封装格式
  15. 华氏度和摄氏度的相互转化
  16. 【笔记】排列组合公式、二项式定理
  17. 如何使用一个手机号注册两个微信号!
  18. HH SaaS电商系统的虚拟资金账户(钱包余额)设计
  19. OSChina 周五乱弹 —— 源花?真土鳖,我要开源小仙女!
  20. JAVA身份证阅读器数据返回图片

热门文章

  1. Linux基础(1)--Vim编辑器的常用命令
  2. 7-37 整数分解为若干项之和 (20 分)(dfs)
  3. 7-113 堆栈操作合法性 (20 分)
  4. 7-8 判断三角形类型 (20 分)
  5. 4007-基于邻接表的新边的增加(C++,附思路)
  6. 区块链基础学习(一)
  7. 数据库(4)表的基本操作
  8. binding.BindingException: Invalid bound statement (not found): xxx → dao接口和mapper.xml映射文件绑定异常
  9. php var export 数组,PHP关于数组缓存JSON、serialize、var_export的说明
  10. mysql 还原数据库 unknown command 'b'_mysql数据库还原出错ERROR:Unknown command ‘\\’解决手记...