【读书笔记】React 设计模式与最佳实践

发现一本还不错的 react 相关的书,《React 设计模式与最佳实践》,第一版是 18 年 8 月份的,比较新,目测适合入门和巩固 React 开发的人,更加全面的了解 React 的开发,不涉及到源码解读等。这里记录一下阅读后我不熟悉的或值得记录的点。

JSX

jsx 中插入多空格

<div>a{" "}b{" "}c</div>

条件渲染

很多时候需要根据条件判断是否需要渲染某个组件,常常我们会这样写:

1
<div>{dataIsReady && (isAdmin || userHasPermissions) && <SecretData />}</div>

如果条件比较复杂,可以抽离出判断规则为一个方法: this.isRender && <SecretData />
为了保证组件的纯净,可以使用 react-only-if 这个库,能够快速的创建出根据条件渲染的高阶组件。

展开属性

属性可以直接传入一个展开的对象,不用一个一个对应再写一遍 <button {...props} />

getter

age(){} => get age(),使用的时候可以省略括号,相当于一个值,可以类比为 vue 中的计算属性。

动画

推荐一个库react-transition-group,能够更方便的控制多个状态。

性能优化

环境

用 webpack 打包的时候区分好生产环境和开发环境。

函数式组件

该类型组件没有实例化过程,所以没有自己的生命周期和状态,适合用来构建大型的组件,因为耦合度更低。多使用函数式组件能够让思路更清晰。

手动控制组件更新

合理使用 shouldComponentUpdate() 方法和 PureComponent 组件,减少没必要的组件更新。

props 常量对象

将一个常量对象作为 props 时最好在外部创建,通过引用传入,而不是在属性上创建,同理绑定 props 方法时也是这样。这样能够避免每次 update 都重复创建,以及在循环中重复创建。

bad:

1
2
<Com status={[1: 'a', 2: 'b']} />
<Com status={() => {}} />

good:

1
2
<Com status={this.status} />
<Com status={this.fun} />

代码风格

强烈建议项目中加入 eslint 等代码风格检查工具,配合 ide 插件能够实时提醒,保证多人开发的时候看到的代码是一致的。另外推荐 prettier,一个代码自动格式化工具,eslint 虽然提示了,但是自己手动修改也是麻烦,该库能够根据 eslint 配置或者个人配置自动格式化代码,完美搭档。

函数式编程

我个人的理解是运用柯里化组合链式调用等技巧写出没有副作用简单明了易于维护的代码。而 es6 可以很方便的实现这几个技巧。

CSS

CSS 是前端开发无法避免的话题,文中提到几个 css 写法:Css in JavaScript、 style、 Radium,其实这三个都是都是行内样式的写法,实际开发时并不推荐,样式不好复用,相当于阉割版 css,无法使用 less/scss 等优秀的预处理器。个人觉得最合适的还是 CSS Module,灵活,纯正。

服务端渲染

一直没有去尝试做这个,服务端渲染技术能够改善 SEO 和首屏加载速度,因为首屏页面是在服务端进行的,而不是浏览器端,这样页面能够更快速的呈现。实现需要后端配合。

测试与调试

目前我都没有在项目中写个测试,对于 react 组件,测试写起来比较繁琐,而且变化也很频繁,的确让人容易怯步,后续可以考虑一下,或许需要重新审视一下测试。

react 调试比较有用的是 react-devtoolsredux-devtools,前者调试组件,后者调试 redux