内容简介:悄咪咪说一下今天是世界微笑日(orz),祝大家快乐:grinning:
- PropTypes & DefaultProps
-
PropTypes 对通信间传入的值进行校验
import PropTypes from 'prop-types'
TodoItem.propTypes = { // arrayOf 或者 是数字 或者是 字符串 // arrayOf( PropTypes.number , PropTypes.string ) //基本的一些类型 optionalArray: PropTypes.array, optionalBool: PropTypes.bool, optionalFunc: PropTypes.func, optionalNumber: PropTypes.number, optionalObject: PropTypes.object, optionalString: PropTypes.string, optionalSymbol: PropTypes.symbol, // optionalNode: PropTypes.node, // 一个 React 元素 optionalElement: PropTypes.element, //也可以检查是不是一个类的实例 optionalMessage: PropTypes.instanceOf(Message), //检查是不是其中确切的值之一 optionalEnum: PropTypes.oneOf(['News', 'Photos']), //也可以是这些类型其中之一 optionalUnion: PropTypes.oneOfType([ PropTypes.string, PropTypes.number, PropTypes.instanceOf(Message) ]), // 一个某种类型的数组 optionalArrayOf: PropTypes.arrayOf(PropTypes.number), // 一个特定形式的对象 optionalObjectWithShape: PropTypes.shape({ color: PropTypes.string, fontSize: PropTypes.number }), //isReauired修饰的值表示必须传入 不能为空 且必须是string(或者其他) optionalisStringReauired: PrpTypes.string.isRequired // 任何数据类型的值 requiredAny: PropTypes.any.isRequired, } 复制代码 -
defaultProps
- 如果没传入设定一个默认值
TodoItem.defaultProps = { content: 'this is null' } 复制代码
- 如果没传入设定一个默认值
-
更多详情见文档 Typechecking With PropTypes Doc
-
- Props ,State 与 render 函数
- 当组件的state 或者 props进行改变的时候 render函数就会重新执行
- 当父组件的render函数被运行时 它的子组件的render都将被重新运行
- 虚拟DOM (本质就是一个js对象 用来描述真实DOM)
- react利用虚拟DOM渲染的流程
- :point_down: state数据
- :point_down: jsx模板
- :point_down: state数据和jsx模板结合 先生成一个虚拟DOM
React.createElement(tagName,{attr}, content) 复制代码 - :point_down: 用虚拟DOM生成真实DOM来显示
- :point_down: state数据改变
- :point_down: 数据 + 模板 重新渲染 生成新的虚拟DOM 并与 之前的虚拟DOM做对比 找出改变的那一部分 是两个js对象之间的对比
- :point_down: 找到变化后 直接操作DOM 更新
- 优点:
- 性能提升
- 跨端得以实现 RN..
- 虚拟DOM中的Diff算法 (different, 找差异算法)
- 虚拟DOM树是同层比较的
- key值是对比中的一个标识 所以key值要保持稳定 尽量不用index作为key 用item
- react利用虚拟DOM渲染的流程
- 用ref来操作DOM (避免使用..因为推荐数据驱动的方式 不操作DOM)
-
e.target也可以获取到 - 给相应的元素添加
ref="xxx"的属性, 然后this.refs.xxx获取到DOM元素 -
ref={ (xxx) =>{ this.xxx = xxx } }相应的this.xxx就是那个DOM元素了
-
-
setState()- 是一个'异步'操作 立马执行完之后React会对state的所有改变进行合并处理之后 才会重新去计算新的虚拟DOM 再根据最新的虚拟DOM去重新渲染真实DOM
但是 这个异步是伪异步 只是维护了一个updataQueue 并不是说本身就是异步代码实现的 - 第二个参数是一个回调函数, 即视图更新完毕后调用 就会避免某些值获取不到的情况
- 是一个'异步'操作 立马执行完之后React会对state的所有改变进行合并处理之后 才会重新去计算新的虚拟DOM 再根据最新的虚拟DOM去重新渲染真实DOM
- React的生命周期函数
- 在某一个时刻组件会自动执行的函数
- Initialization (初始化一些数据)
-
constructor初始化state和props 以及一些函数this指向问题constructor不是React独有的 是es6 class语法 这里完美契合了React
-
- Mounting (挂载时的生命周期 ,注意是第一次挂载时 之后数据更新,虚拟DOM更新后的挂载不算)
componentWillMount componentDidMount
- Updation (组件更新的流程)
- props发生变化
-
props发生变化时 最开始会有一个componentWillReceiveProps一个组件从父组件接收参数, 只要父组件的render函数被重新执行了 子组件的中国生命周期函数就会被执行
-
- 共同的生命周期函数
-
shouldComponentUpdate组件被更新之前 自动执行
需要return一个布尔值
如果return true 组件会被更新
如果return false 组件不更新 且之后的生命周期函数都不执行了
如果这个组件第一次存在于父组件中 不会被执行
如果这个组件之前已经存在于父组件中 才会执行 -
componentWillUpdate组件更新之前会被自动执行 但是在shouldComponentUpdate之后执行 如果shouldComponentUpdatereturn false 就不执行了 -
render知道要数据更新了 所以render函数又会自动执行 更新组件 -
componentDidUpdate组件更新完毕之后执行
-
- props发生变化
- Unmounting
-
componentWillUnmount当组件即将被销毁时执行 此时还未被移除
-
- 网上扣了张图..侵删..
需要注意的是 图中最开始的两个函数在使用es6constructor时就不需要了
悄咪咪说一下今天是世界微笑日(orz),祝大家快乐:grinning:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 【每日笔记】【Go学习笔记】2019-01-04 Codis笔记
- 【每日笔记】【Go学习笔记】2019-01-02 Codis笔记
- 【每日笔记】【Go学习笔记】2019-01-07 Codis笔记
- Golang学习笔记-调度器学习
- Vue学习笔记(二)------axios学习
- 算法/NLP/深度学习/机器学习面试笔记
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Rework
Jason Fried、David Heinemeier Hansson / Crown Business / 2010-3-9 / USD 22.00
"Jason Fried and David Hansson follow their own advice in REWORK, laying bare the surprising philosophies at the core of 37signals' success and inspiring us to put them into practice. There's no jarg......一起来看看 《Rework》 这本书的介绍吧!