简评:除了常见的 HOC 和 RenderProp 技巧,作者介绍了 7 个有用的知识点。

使用 Fragment 而不是 div

很多时候我们想要处理多个 component,但是 render 只允许返回一个 component,为了处理这个问题很可以使用

标签来包装所有的 component 。但这会添加额外的 HTML 元素。所以官方的建议是推荐使用 React Fragments 来处理这个问题。

import React, { Fragment } from 'react';

function ListItem({ item }) {

return (

<Fragment>
<dt>{item.term}</dt>
<dd>{item.description}</dd>
</Fragment> // 也可以使用 <>....</> 来替换 <Fragment> // 等同于 // <> // <dt>{item.term}</dt> // <dd>{item.description}</dd> // </>

);}

function Glossary(props) {

return (



{props.items.map(item => (



))}

);}

context 用起来

Context 提供了一种方式将数据传递到整个 component 树中,而不必手动为每一层 component 传递 props。

因此,如果你有多个需要值的 component,建议使用 context。如果只有一个子 component 需要使用这个值建议使用 compositions。

最少使用一个 Error Boundaries

React 16 附带了一个惊艳的功能 Error Boundaries。使用 Error Boundaries 我们可以处理这种问题,子组件出现错误不会导致整个应用报错和白屏。

举个例子: 定义一个 ErrorBoundary 组件

class ErrorBoundary extends React.Component {

constructor(props) {

super(props);

this.state = { hasError: false };

}static getDerivedStateFromError(error) {

// Update state so the next render will show the fallback UI. return { hasError: true };

}componentDidCatch(error, info) {

// You can also log the error to an error reporting service logErrorToMyService(error, info);

}render() {

if (this.state.hasError) {

// You can render any custom fallback UI return

Something went wrong.

;

}return this.props.children;

}}

用法和其他组件一样简单:

注意:React15 中的 unstable_handleError 方法不再有效,需要替换成 componentDidCatch 方法。

在生产环境中使用 production build

官网提供了很多提高性能的 配置。只需要 10 分钟即可给你的应用带来质的飞跃,在部署到生产环境前别忘了检查它们。

使用 Refs 来操纵元素

我们可以使用 Refs 来触发动画,文本选择或焦点管理。

例如:

我们可以 获取 inpout DOM 节点引用。

class CustomTextInput extends React.Component {

constructor(props) {

super(props);

// Create a ref to store the textInput DOM element

this.textInput = React.createRef();

}

render() {

// Use the ref callback to store a reference to the text input DOM

// element in an instance field (for example, this.textInput).

return (



);

}

}

然后就可以在合适的时机聚焦这个

focus() {

// Explicitly focus the text input using the raw DOM API

// Note: we're accessing "current" to get the DOM node

this.textInput.current.focus();

}

使用代码拆分

如果你使用 create-react-app 创建应用或使用 NextJs 会自动创建一个 webpack 配置文件,webpack 会将整个应用打包到一个文件中,如果应用程序变得复杂或者添加第三方库都会导致最终生成的文件变大,导致应用访问速度变慢。这时候可以使用代码拆分,创建多个输出,在需要的时候才加载对应的包,可以大大改善网页加载时间。

可以使用 React.lazy 来实现代码拆分。

使用方式也很简单,这里简单实现一个基于路由代码分割的例子:

import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';import React, { Suspense, lazy } from 'react';const Home = lazy(() => import('./routes/Home'));const About = lazy(() => import('./routes/About'));const App = () => (



<Suspense fallback={

Loading...

}>











);

注意: React.lazy 和 Suspense 暂不支持服务端渲染,如果服务端渲染想要实现这个功能可以使用 React Loadable。

静态类型检查

JavaScript 不会对类型进行检查,这可能导致很多的问题。可以使用类型检查器(例如 Flow)来帮助我们提前发现错误。Flow 是有 facebook 开发的类型检查器,可以给变量、函数和 React Component 添加而外的注释是一个不错的选择。

原文:Concepts to become an advanced React developer

成为高级 React 开发你需要知道的知识点的更多相关文章

  1. 面试 Java 高级后端开发,要准备哪些知识点?

    其实公司肯花时间让你去面试,前提条件一定是通过你的简历,一定发现了你和公司的匹配点,也就是说,一定是有录用意向的. 在技术面试的时间段里(最长1个小时),你如果能展现你的优势那是最好的,但如果你做不到 ...

  2. Webpack笔记(二)——搭建React开发环境

    前几天一直在学习webpack,总算比之前学习的时候有了点收获,所以在昨天发布了一篇webpack入门笔记,今天继续使用webpack练了练手,搭建了一个React开发环境,如果还不熟悉的童鞋可以看一 ...

  3. React开发实时聊天招聘工具 -第一章

    第一章 课程道学 6个页面 弱化css Antd-mobile作为组件库 Redux 状态管理 React-Router 路由 Axios异步请求 后端Express框架 Socket.io 数据库: ...

  4. React开发环境配置

    本文以上一篇文章继续配置:npm安装及环境配置<https://www.cnblogs.com/hzb462606/p/11565275.html> 使用 create-react-app ...

  5. React 开发中面临的九个重要抉择

    抉择系列:在技术开发的过程中我们会面临着各种各样的抉择,我们在不同情境下该如何选择恰当的技术,这是本系列文章想要解决的问题. 在 React 开发的过程中我们常常会遇到一些抉择,下面我将选取其中一些个 ...

  6. JS高级前端开发群加群说明及如何晋级

    JS高级前端开发群加群说明 一.文章背景: 二. 高级群: 三. 加入方式: 四. 说明:   一.文章背景: 去年年初建了几个群,在不经意间火了,一直排在“前端开发”关键字搜索结果第一名.当然取得这 ...

  7. 微信平台ASPX高级定制开发(一):如何使用C#建立响应微信接入和自动回复的代码

    微信平台不解释了,如果不了解的百度一下下,如果不会用微信,请自宫,光盘重启电脑,打开CMD输入Format C:.网上有很多针对企业级的高级定制ASPX开发,写得草草了事,很多男人干事都草草了事,这可 ...

  8. 前端进阶试题css(来自js高级前端开发---豪情)既然被发现了HOHO,那我就置顶了嘿嘿!觉得自己技术OK的可以把这套题目做完哦,然后加入高级前端的社区咯

    http://www.cnblogs.com/jikey/p/4426105.html js高级前端开发加群方法(此群很难进,里面纯技术,严禁广告,水群) 完整题目做完发邮箱(jikeytang@16 ...

  9. 基于Nodejs生态圈的TypeScript+React开发入门教程

    基于Nodejs生态圈的TypeScript+React开发入门教程   概述 本教程旨在为基于Nodejs npm生态圈的前端程序开发提供入门讲解. Nodejs是什么 Nodejs是一个高性能Ja ...

随机推荐

  1. jquery-ui sortable 使用实例

    jquery-ui sortable 使用实例 最近公司需要做任务看板,需要拖拽效果.点击查看效果.由于网站是基于vue的技术栈,最开始找了一个现成的vue封装的拖拽组件:Vue.Draggable, ...

  2. QTableWidget简单应用之文件浏览器

     实现下面这个简单的文件浏览功能,常用的QTableWidget设置都用到了.  基本设置 ui->tableWidget->setColumnCount(5); //设置表格列数 ui- ...

  3. CAP碎碎念

    整个2017年都在搞大数据平台,完全远离了机器学习,甚至都不记得写过类似ETL的job. 从数据到平台,从业务处理到基础服务. Metrics的收集,报警,生成报表.Data pipeline的准确性 ...

  4. Qt之界面数据存储与获取(userData)

    http://blog.csdn.net/u011012932/article/details/52413012#comments

  5. QTcpSocket 对连接服务器中断的不同情况进行判定

    http://blog.csdn.net/goforwardtostep/article/details/52300335

  6. Java入门网络编程-使用UDP通信

    程序说明: 以下代码,利用java的网络编程,使用UDP通信作为通信协议,描述了一个简易的多人聊天程序,此程序可以使用公网或者是局域网进行聊天,要求有一台服务器.程序一共分为2个包,第一个包:udp, ...

  7. 高并发 Nginx+Lua OpenResty系列(10)——商品详情页

    本章以京东商品详情页为例,京东商品详情页虽然仅是单个页面,但是其数据聚合源是非常多的,除了一些实时性要求比较高的如价格.库存.服务支持等通过AJAX异步加载加载之外,其他的数据都是在后端做数据聚合然后 ...

  8. 【React】react学习笔记01-概念与基本使用

      俺为啥要学这玩意:   家里的杂事好不容易处理完了,开始正式静下心来学习~博主是做后端开发的,js基础不深,之前也是用React写过许多东西了,但是基本上都是用的CV大法,别人的组 件修修改改拿来 ...

  9. MyBatis无限级分类实现的两种方法--自关联与map集合

    1.这回先创建数据库吧 下表cid是CategoryId的缩写,cname是CategoryName的缩写,pid是parentId的缩写 无限级分类一般都包含这三个属性,至少也要包含cid和pid才 ...

  10. java创建对象的方式

    Java中创建对象的5种方式 作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种 ...