-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
1. 纯 React 技术目录 #122
Comments
常用重构手法和刻意练习
|
工程实践组件中的条件逻辑与列表渲染 - Conditional Rendering & List Data Rendering简单来说,组件中经常会出现 经过考察各种各样的方案,只有下面👇这种方式是我所能勉强接受的、差强人意的解决方案。已经很难看了。 const NewsItem = ({ text, optionalVideoId }) => (
<Text>{ text }</Text>
{ !!optionalVideoId && (
<VideoPlayer id={optionalVideoId} />
) }
) 下面👇这种很清晰,多出来的 const Login = ({ isLoggedIn, loginMode }) => {
if (isLoggedIn) {
return <Profile loginMode={ loginMode } />
}
return <Login />
}
const Login = ({ isLoggedIn, loginMode }) => {
return isLoggedIn ? <Profile loginMode={ loginMode } /> : <Login />
} 对于列表渲染,RN 中有
<If condition={data.length !== 0}>
<Data />
</If> <List data={data} renderItem={({ id, title }) => <div>{id}: {title}</div>} /> 卧槽,今天发现这些库干的事情就跟我想的一样啊,用来对付简单逻辑,又获得模板声明式的好处,又可以省去测试并依然有信心。然后复杂逻辑就得益于 Vanilla JS 来处理,简直 React 完美的解决方案:
组件的拆分粒度项目目录结构划分
|
单元测试 |
性能优化首先性能优化界有句经典的名言,叫「Measure/Profile first, optimise second」,意思就是先分析瓶颈,再进行优化。这是推崇数据先行的思路,理由是我们从理论上推导所知的性能瓶颈,不一定是真正的问题所在,因为在我们写的代码和实际在机器上运行的代码中间,还可能有编译器或框架本身会为我们做优化,这中间过程是不可见不可预测的。因此,先做 profile,从数据上看到性能瓶颈以后再进行优化,往往是比较高效的做法。 然后,程墨在 《浅出》 中引用了 Donald 的名言:「过早优化是万恶之源」并补全了原句,指出其实过早优化非架构上的、对性能影响不大的代码才是万恶之源,对核心代码的架构和性能进行优化是合理的,并且应该时时进行,越早越好,越到后面成本越高。至于什么算核心代码,大概没人能给出明确定义,只能依靠各人经验而为了。但他这里就指出了,经验(而非数据)在优化领域还是有用武之地的。 那么,以 React 为 UI 库的代码还有什么可优化的地方?不是说 React 的 diff 算法已经非常牛逼,reconciliation 已经非常高效了么?这是因为,React 只是个库(愿意的话也可叫框架),而没有任何库能完美契合 所有 使用者的需求。这就导致,为了保证绝大多数人的正常使用,它必须使用保守的设计策略,而不能假设每个开发者都具有比较丰富的背景知识。这个正确而保守的策略就为高级开发者带来了优化的空间。那么问题来了,你,是不是(是否愿意成为)这个高级的开发者呢? React 组件的优化策略从大面上分列如下:
避免不必要的 re-
|
非常期待 |
深入原理 - React 核心机制
|
高阶组件 |
如何学习一样新东西?
我希望以前端作为职业切入点来立足于行业(而事实上我现在的工作更多跟NodeJS与后端有关系……),而React又是前端中我选择的切入点,所以这个系列希望能以系统化的思路来组织React、产出学习经验,也即是最好有一个学习路线图。
2017年学习的时候,React官方对自己的定位是一个声明式、函数式的UI库。其处理的核心是UI,优势在于其声明式、组件化的特性提高了前端代码的可维护性和可扩展性。而前端工作相关的数据仓库、副作用、路由这三个主要部分,主要是由周边的组件/库来负责。
在社区多个解决方案的迭代中,逐渐形成了以
react-redux
/redux-saga
/react-router
为主要解决方案的几个组件(当然还有其他的方案,比如mobx
/redux-thunk
/react-router
v3和v4的不同路由API等),也出现了以封装最佳实践、简化模板代码为初衷的二次框架,如dva
/umi
系列。UI方面,antd
也为许多企业应用所接纳。而到了2020年的今天,React在UI这个核心以外在这三大方面中的数据流和副作用方面又多做了一些工作(比如
Context
API、hooks
API等),使得以“前端问题域”为核心的解决方案更加完善,当然是赋能了开发者能用React来更简单地做前端的解决方案。这一点,在阅读《深入浅出React&Redux》的时候如能对比思考,会有更多收获。《深入浅出》建构的路线图 与 读书法
如果把“前端解决方案”作为一个整体来看待,在React(当然其他的技术栈也成立)这个套餐内它的各个部分分别是:React本身提供UI能力、数据流/副作用/路由由社区方案负责。这本书的结构也围绕这几个点展开:
React部分的章节:
props/state
、生命周期函数社区方案的部分:
redux-thunk
、redux-promise
等react-router
以及相关主题等第8章“单元测试”写得没我好,三观也不正,属于和稀泥、为了讨好更多受众的写法:“测也好不测也好,对开发有用才是好”。说得好像没测试还会更好似的。但问题的关键也不在这,关键是你不练怎么会好呢?你不练TDD,怎么知道什么才是对开发有用的测试呢?第10章、第12章可选读,没事不用读。
除此以外,一个正常的前端项目还必须有以下的工具/能力支撑,好在到了2020年的今天,许多方案选型已经相对固定了:
目录
props
,state
, andPropTypes
state
的缺陷context
React.createElement()
API最佳的学习资料
The text was updated successfully, but these errors were encountered: