这里集合了一些代码优化的小技巧

  • 在初步接触 es6+ 和 react 的时候总结的一些让代码跟加简化和可读性更高的写法
  • 大部分知识点是自己在平时项目中还不知道总结的,一致的很多优化的点没有写出来,逐步增加中,目的是使用最少的代码,高效的解决问题
  • 有什么更好的方法和不足之处,欢迎大家指出。

react es6+ 代码优化之路-1

1、函数式默认参数

  • 使用函数默认的参数, 使用 es6+ 的时候,有了结构赋值,我们就不用再函数中自己再去定义一个变量。
/*当我们使用 es5 的时候
**/
var es5Fun = function (config) {var foo = config || 'default foo'console.log(foo)
}//我们传一个对象进去
es5Fun() // 'default foo'
es5Fun('not default foo') // 'not default foo'/*当我们使用 es6+ 的时候
**/
const es6Fun = (config = {'defalut'})=>{console.log(config)
}es6Fun(); // 'defalut'
es6Fun('not defalut') // 'not defalut'
复制代码

1.1 简洁的数组解构

//bad
const splitLocale = locale.split('-');
const language = splitLocale[0];
const country = splitLocale[1];//good
const [language, country] = locale.split('-');
复制代码

2、函数命名,布尔变量和返回布尔值的函数应该以is,has,should开头

//bad
const good = current => goal;//good
const isGood = current => goal;
复制代码

3、别重复自己的代码

  • 明显可以复用的直接使用组件来套用
//bad
const MyComponent = () => (<div><OtherComponent type="a" className="colorful" foo={123} bar={456} /><OtherComponent type="b" className="colorful" foo={123} bar={456} />    </div>
);//good
const MyOtherComponent = ({ type }) => (<OtherComponent type={type} className="colorful" foo={123} bar={456} />
);
const MyComponent = () => (<div><MyOtherComponent type="a" /><MyOtherComponent type="b" /></div>
);
复制代码

3.1、函数和组件传值的复用

  • 当我们开始创建了一个组件 Thingie,到后面我们增加了一个需求,需要随时添加一个 title,所以我们又写了一个组件 ThingieWithTitle。这明显可以复用,下面看一下怎么去复用这个组件在 react 中。
//bad
import Title from './Title';export const Thingie = ({ description }) => (<div class="thingie"><div class="description-wrapper"><Description value={description} /></div></div>
);export const ThingieWithTitle = ({ title, description }) => (<div class="ThingieWithTitle"><Title value={title} /><div class="description-wrapper"><Description value={description} /></div></div>
);
复制代码
  • 在这里,我们将 children 传递给 Thingie。然后创建 ThingieWithTitle,这个组件包含 Thingie,并将 Title 作为其子组件传给 Thingie。这样我们就可以分离的使用两个组件,相互不影响,耦合度小。
//good
import Title from './Title';export const Thingie = ({ description, children }) => (<div class="thingie">{children}<div class="description-wrapper"><Description value={description} /></div></div>
);export const ThingieWithTitle = ({ title, ...others }) => (<Thingie {...others}><Title value={title} /></Thingie>
);
复制代码

4、多使用无状态组件

  • 从渲染分离有状态的部分
//bad
class User extends Component {state = { loading: true };render() {const { loading, user } = this.state;return loading? <div>Loading...</div>: <div><div>First name: {user.firstName}</div><div>First name: {user.lastName}</div>...</div>;}componentDidMount() {fetchUser(this.props.id).then((user) => { this.setState({ loading: false, user })})}
}//good
//我们把无状态的组件写进 <Renderuser /> 中
import RenderUser from './RenderUser';class User extends Component {state = { loading: true };render() {const { loading, user } = this.state;return loading ? <Loading /> : <RenderUser user={user} />;}componentDidMount() {fetchUser(this.props.id).then(user => { this.setState({ loading: false, user })})}
}//anohter good
class User extends Component {state = { loading: true };_render(){return ()}render() {const { loading, user } = this.state;return loading ? <Loading /> : <RenderUser user={user} />;}componentDidMount() {fetchUser(this.props.id).then(user => { this.setState({ loading: false, user })})}
}
复制代码

x、使用高阶组件重构代码

  • 未完待续

react es6+ 代码优化之路-1相关推荐

  1. React爬坑之路二:Router+Redux

    上一篇写了Antd和Axios的基本操作 之前大标题到五了那么这篇从六开始 ST也是初学小白可能讲的完全不对 大家当做小说随便读读消遣一下就好 React官网:https://reactjs.org/ ...

  2. React爬坑之路三:Dva

    前两篇写了react各种基本操作和主要概念 但其实没必要那么复杂直接用框架就好啦 这年头前端框架真是一睁眼就多出好几个 傻瓜级教程写的不合理的地方请批评指正 React官网:https://react ...

  3. 从零开始的 React 组件开发之路 (一):表格篇

    React 下的表格狂想曲 0. 前言 欢迎大家阅读「从零开始的 React 组件开发之路」系列第一篇,表格篇.本系列的特色是从 需求分析.API 设计和代码设计 三个递进的过程中,由简到繁地开发一个 ...

  4. [react] ES6的语法‘...‘在React中有哪些应用?

    [react] ES6的语法'...'在React中有哪些应用? 向子组件传递props <Demo {...this.props}> redux中参数合并 个人简介 我是歌谣,欢迎和大家 ...

  5. webpack+react+es6开发模式

    一.前言 实习了两个月,把在公司用到的前端开发模式做个简单的整理.公司里前端开发模式webpack+react+redux+es6,这里去掉了redux. webpack, react, redux等 ...

  6. 马上开始写 react ES6 --- 基于gulp 和 Babel 的脚手架

    我对 react 很有兴趣,但是我发现想写 react 不容易. 我需要在开始写代码之前做很多准备工作,我需要编译jsx文件,引入react等等,而最新的react示例,有鼓励ES6来书写代码,可以用 ...

  7. React ES6组件里绑定this的三种方式

    React可以使用React.createClass.ES6 classes.纯函数3种方式构建组件.使用React.createClass会自动绑定每个方法的this到当前组件,但使用ES6 cla ...

  8. react redux学习之路

    React 自学 chapter one React新的前端思维方式 React的首要思想是通过组件(Component)来开发应用.所谓组件,简单说,指的是能够完成某个特定功能的独立的.可重用的代码 ...

  9. react todolist代码优化

    Todolist.js import React, { Component,Fragment } from 'react'; import TodoItem from './TodoItem'; im ...

最新文章

  1. C++ pair的使用
  2. 团队-爬虫豆瓣top250项目-项目进度
  3. 2020年人工智能领域突破性工作
  4. 格“物”致知:多模态预训练再次入门
  5. Django:Admin,Cookie,Session
  6. php自动报价,使用PHP转换所有类型的智能报价
  7. portlet_平台策略:从Portlet到OpenSocial小工具再到渐进式Web应用程序:最新技术
  8. GCDAynscSocket简单使用-客户端
  9. 元组可以直接添加进数据库吗_数据库篇-第一章:数据库基本概念
  10. 机器学习基石--学习笔记02--Hard Dual SVM
  11. (88)FPGA写文件激励(fwrite)
  12. Deskew Technologies Gig Performer 4 Mac(现场调音机架)
  13. Aladdin HASP加密狗破解脱壳笔记
  14. Epub 转 txt
  15. 显示具体化、显示实例化、隐式实例化
  16. 相机XD卡格式化后,照片恢复
  17. 如果《使命召唤》登陆Facebook…
  18. 版号审批重启,游戏行业有望尽早度过寒冬?
  19. 武侠中的基本要素(武侠之奥义)
  20. Week2 Bing词典Android客户端案例分析

热门文章

  1. [ACM] hdu 1253 胜利大逃亡 (三维BFS)
  2. 将日期yyyy-MM-dd转为数字大写的形式
  3. 《爱情公寓2》将播 恶搞宣传片大喊“有种别看”
  4. iOS原生与html交互 使用第三方WebViewJavascriptBridge
  5. OC封装的轮播图-只用调用即可
  6. 数据连接池的工作机制是什么?
  7. 型网站的架构设计问题----大型高并发高负载网站的系统架构
  8. [USACO07JAN]平衡的阵容Balanced Lineup BZOJ 1699
  9. Java内存模型与线程
  10. SAP 差旅报销集成方案的实现