《深入React技术栈》 读书笔记

第一章

  1. React的精髓就是函数式编程
  2. VirtualDOM与对象树
  3. 组件元素
  4. 无状态组件和内存优化(避免不必要的检查和内存分配)
  5. 数据流 : 单向数据流 从父组件到子组件
  6. setState是一个异步方法,一个生命周期内的所有setState方法会合并操作
  7. shouldComponentUpdate方法用来判断是否需要渲染。无状态组件没有shouldComponentUpdate方法,可以用Recompose的pure方法解决(性能优化)
  8. 不稳定方法unstable_renderSubtreeIntoContainer,和render的区别是它传入了父组件

第二章

事件

  1. React事件处理机制,React的事件处理函数没有直接绑定到真实节点上,而是吧所有事件绑定到结构的最外层,使用一个统一的事件监听器。这个监听器维持了一个映射来保存所有组件内部的事件监听和处理函数。组件挂载和卸载时,只是在这个统一的事件监听器上插入或者删除一些对象。
  2. 在React中绑定this
  • 一直在用的bind方法。可以向处理器中传递参数
onClick = {this.handleClick.bind(this, 'text')}
//没有参数的情况 可以使用双冒号语法
onClick = {::this.handleClick)}
  • 构造器内申明
  • 箭头函数自动绑定作用域this
class App extends Component(){
    const handleClick = (e) =>{
    console.log(e)
    }
    render(){
    return <button onClick={this.handleClick}>Test</button> 
    }
}
  1. 使用原生事件:可以在componentDidMount里面为DOM(利用refs找到DOM)添加监听器,但是要在componentWillUnmout里面卸载到监听器
  2. 补充一个基本知识点:事件冒泡 事件捕获
element.addEventListener(event, function, useCapture)
//第三个参数默认为false
//false:表示在事件冒泡阶段调用事件处理函数
//true:表示在事件捕获阶段调用处理函数

表单控件

  1. 表单组件: 受控组件vs非受控组件。
  • 受控组件都要绑定Change事件
  • 非受控属性属于反模式设计,可以用redux/flux来替代。
  • 受控组件的提供了用来通过状态控制展示组件的属性:value(input, textarea),checked(radio, checkbox)以及推荐在select组件上使用Value而不是在option 上使用selected

CSS Module

  1. classnames库 帮助处理动态类名
  2. css模块化遇到的问题,
  3. css模块化的方案:CSS Module
  4. CSS Module样式默认局部,要使用全局样式就加入
:global{
/* 样式 ...*/
}
  1. 样式复用: 官方唯一指定方式,composes组合
  2. class命名: 推荐BEM命名法---Block(模块名,如dialog),Elem(模块中的节点名, 如deleteButton),Modifier(节点对应状态,如disabled)
/*./dialog.css*/
.DeleteButton--disabled {}
  1. 变量输出::export
  2. 引入normalize.css这样的全局样式,借助webpack配置一下
  3. 一般将外层节点的class设置成root
  4. 进阶技巧,使用react-css-module库来升级原生Module CSS

组件通信

  1. 父组件 -> 子组件: 利用props
  2. 子组件 ->父组件:利用回调函数和自定义事件机制 handle*()
  3. 跨级组件通信: context. 但是建议只用在真正的全局且不会被更改的信息上,如界面主题,用户信息等
  4. 跨级通信是反模式设计

高阶函数的功能

属性代理:

const MyHocContainer = (WrappedComponent){
    class extend Component {// 继承自component
  }
}
  1. 控制Props:为React组件加上一层Props,用法类似Redux小书中例子
  2. 通过refs使用引用(不是很懂这个方法可以做甚?避免组件自己去操作DOM实例?)
  3. 抽象state: 类似Redux小书的例子,将组件抽取成一个dumb组件,在HOC中进行将数据通过props传给dumb组件。
  4. 使用其他元素包裹组件,可以用来为组件添加样式
    反向继承:
const MyHocContainer = (WrappedComponent){
    class extend WrappedComponent {// 继承自component
//可以在里面使用WrappedComponent的state,props,生命周期和render  
}
}
  • 渲染劫持:条件渲染等
  • 控制state:书上的debug实例
  • 组件命名:书上例子,解决使用高阶函数导致原始组件displayname失去的问题。或者使用recompose库

组合式组件开发事件
补充知识:decorator

组件性能优化

  1. Purerender()
  2. Immutable Data:一经创建就不能被改变的数据。结构共享:如果对象树某一个节点改变,就修改该节点与其父节点,而不用修改整个对象树
  3. clojurescript
  4. 最常用的性能优化:shouldComponentUptade,结合Immutabale的is(),和===就可以判断数据是否改变从而需不需要执行组件的渲染。这样一来state变化之后不会渲染所有节点,而是将有变化的节点及其父节点们渲染。
  5. 动态子组件一定要key,当有两个子组件需要渲染的时候,没办法给他设置key,就可以用React插件:createFragment
    6: 量化优化性能:react-addons-perf插件

React动画

这一节可以要用到的时候再来看

  1. 缓动函数:最佳用户体验: spring,cubic-bezier
  2. 物理缓动: 通过物理规律来设置缓动Three.js例子,酷炫!
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容