内容简介:悄咪咪说一下今天是世界微笑日(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
之后执行 如果shouldComponentUpdate
return 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/深度学习/机器学习面试笔记
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。