1.render 函数中 return 如果没有使用()会有什么问题?

我们在使用 JSX 语法书写 react 代码时,babel 会将 JSX 语法编译成 js,同时会在每行自动添加分号(;),如果 return 后换行了,那么就会变成 return;

渲染没有返回任何内容。这通常意味着缺少 return 语句。或者,为了不渲染,返回 null。

为了代码可读性我们一般会在 return 后面添加括号这样代码可以折行书写,否则就在 return 后面紧跟着语句.

错误

const Nav = () => {
return
<nav className="c_navbar">
{ some jsx magic here }
</nav>
}

2.componentWillUpdate 可以直接修改 state 的值吗?

react 组件在每次需要重新渲染时候都会调用 componentWillUpdate(),

例如,我们调用 this.setState()时候

在这个函数中我们之所以不调用 this.setState()是因为该方法会触发另一个 componentWillUpdate(),如果我们 componentWillUpdate()中触发状态更改,我们将以无限循环.

3.什么渲染劫持?

首先,什么是渲染劫持:渲染劫持的概念是控制组件从另一个组件输出的能力,当然这个概念一般和 react 中的高阶组件(HOC)放在一起解释比较有明了。

高阶组件可以在 render 函数中做非常多的操作,从而控制原组件的渲染输出,只要改变了原组件的渲染,我们都将它称之为一种渲染劫持。

实际上,在高阶组件中,组合渲染和条件渲染都是渲染劫持的一种,通过反向继承,不仅可以实现以上两点,还可以增强由原组件 render 函数产生的 React 元素。

实际的操作中 通过 操作 state、props 都可以实现渲染劫持

4.React Intl

react-intl 实现 React 国际化多语言

5.说说 Context 有哪些属性?

新版本的 context api 中 常用的只有 Provider 和 Consumer 两个对象

6.怎么使用 Context 开发组件?

import React, {Component} from 'react'

// 首先创建一个 context 对象这里命名为:ThemeContext
const ThemeContext = React.createContext('light') // 创建一个祖先组件组件 内部使用Provier 这个对象创建一个组件 其中 value 属性是真实传递的属性
class App extends Component {
render () {
return (
<ThemeContext.Provider value="dark">
<Toolbar />
</ThemeContext.Provider>
)
}
} // 渲染 button 组件的外层包裹的属性
function Toolbar () {
return (
<div>
<ThemeButton />
</div>
)
}
// 在 Toolbar 中渲染的button 组件 返回一个 consumer (消费者)将组件组件的 value 值跨组件传递给 // ThemeButton 组件
function ThemeButton (props) {
return (
<ThemeContext.Consumer>
{ theme => <button {...props} theme={theme}>{theme}</button> }
</ThemeContext.Consumer>
)
}

7.为什么 React 并不推荐我们优先考虑使用 Context?

  • Context 目前还处于实验阶段,可能会在后面的发行版本中有很大的变化,事实上这种情况已经发生了,所以为了避免给今后升级带来大的影响和麻烦,不建议在 app 中使用 context。
  • 尽管不建议在 app 中使用 context,但是独有组件而言,由于影响范围小于 app,如果可以做到高内聚,不破坏组件树之间的依赖关系,可以考虑使用 context
  • 对于组件之间的数据通信或者状态管理,有效使用 props 或者 state 解决,然后再考虑使用第三方的成熟库进行解决,以上的方法都不是最佳的方案的时候,在考虑 context。
  • context 的更新需要通过 setState()触发,但是这并不是很可靠的,Context 支持跨组件的访问,但是如果中间的子组件通过一些方法不影响更新,比如 shouldComponentUpdate() 返回 false 那么不能保证 Context 的更新一定可以使用 Context 的子组件,因此,Context 的可靠性需要关注。

8.React15 和 16 别支持 IE 几以上?

React15 版本不直接支持 IE8 浏览器的,官方文档中说 React16 中依赖于集合类型 Map 和 Set 因此不再支持 IE 11 以下的浏览器,如果想要支持,需要使用全局的 polyfill

9.举例说明 React 的插槽有哪些运用场景?

对于 portal 的一个典型用例是当父组件有 overflow: hidden 或 z-index 样式,但你需要子组件能够在视觉上 “跳出(break out)” 其容器。例如,对话框、hovercards 以及提示框。所以一般 react 组件里的模态框,就是这样实现的

10.你有用过 React 的插槽(Portals)吗?怎么用?

  • 首先简单的介绍下 react 中的插槽(Portals),通过 ReactDOM.createPortal(child, container)创建,是 ReactDOM 提供的接口,可以实现将子节点渲染到父组件 DOM 层次结构之外的 DOM 节点。
  • 第一个参数(child)是任何可渲染的 React 子元素,例如一个元素,字符串或 片段(fragment)。第二个参数(container)则是一个 DOM 元素。
  • 对于 portal 的一个典型用例是当父组件有 overflow: hidden 或 z-index 样式,但你需要子组件能够在视觉上 “跳出(break out)” 其容器。例如,对话框、hovercards 以及提示框。所以一般 react 组件里的模态框,就是这样实现的。

11.React 的严格模式有什么用处?

react 的 strictMode 是一个突出显示应用程序中潜在问题的工具,与 Fragment 一样,strictMode 不会渲染任何的可见 UI,它为其后代元素触发额外的检查和警告。

注意:严格模式仅在开发模式下运行,它们不会影响生产构建

可以为程序的任何部分使用严格模式

import React from 'react';

function ExampleApplication() {
return (
<div>
<Header />
<React.StrictMode>
<div>
<ComponentOne />
<ComponentTwo />
</div>
</React.StrictMode>
<Footer />
</div>
);
}

在上述的示例中,不会对 Header 和 Footer 组件运行严格模式检查。但是,ComponentOne 和 ComponentTwo 以及它们的所有后代元素都将进行检查。

StrictMode 目前有助于:

  • 识别不安全的生命周期
  • 关于使用过时字符串 ref API 的警告
  • 关于使用废弃的 findDOMNode 方法的警告
  • 检测意外的副作用
  • 检测过时的 context API

题目和答案来源于 [react 每日 3 问]](https://github.com/haizlin/fe-interview/blob/master/lib/React.md)

最新文章

  1. SQLServer:什么是主键(PK)和外键(FK)?
  2. 《CoffeeScript应用开发》学习:第五章 CoffeeScript中的类
  3. 关于apache httpd.conf脚本的理解
  4. iOS - C 应用
  5. 移动端material风格日期时间选择器
  6. 用实例展示left Join,right join,inner join,join,cross join,union 的区别
  7. ListView控件的用法
  8. Android 拖动条(SeekBar)实例 附完整demo项目代码
  9. 中科燕园GIS外包---地铁GIS项目
  10. SSRF漏洞学习
  11. [转载] 谷歌技术&quot;三宝&quot;之MapReduce
  12. JBOSS EAP实战(2)-集群、NGINX集成、队列与安全
  13. 关于“svn: Can&#39;t connect to host &#39;*.*.*.*&#39;: 由于连接方在一段时间后没有正确答复或连接”的解决方法
  14. HTML、CSS知识点,面试开发都会需要--No.7 数据列表
  15. redis集群相关
  16. CLR,GC 表示什么意思?
  17. bzoj4865: [Ynoi2017]由乃运椰子
  18. Scrapy学习篇(二)之常用命令行工具
  19. CPP复习笔记 3
  20. css3 loading 效果

热门文章

  1. POJ 1430 Binary Stirling Numbers (第二类斯特林数、组合计数)
  2. node.js渲染页面
  3. 一致性Hash 分析和实现
  4. 关于JavaScript的内存机制
  5. nginx+uWSGI+django+virtualenv+supervisor发布web服务器流程
  6. 并发量,tps,qps
  7. 第八周课程总结 &amp; 实验报告(六)
  8. 【Spark机器学习速成宝典】模型篇08支持向量机【SVM】(Python版)
  9. HiddenField Class
  10. 解决ssh链接慢问题