1.propTypes属性强校验
为避免在父组件向子组件传值的过程中传入意外值,如将propTyopes
设置为止接收字符串,则父级不能向子级传递方法。
1 | import PropTypes from 'prop-types'; // 引入 |
2.defatltProps设置属性默认值
如果父组件没有向子组件传递某个值,但是在子组件中调用了这个值,可以用defaultProps
来设置默认值。
1 | TodoItem.defaultProps={ |
3.ref获取元素DOM节点(不推荐)
使用ref
将当前的input
节点绑定到this.input
对象上
1 | <input |
在函数方法中可调用this.input
来获取这个节点的相关属性、方法
1 | var value = this.input.props.value; |
ref方式去操作DOM可能会因为
setState
方法的异步导致数据错误。setState
方法提供第二个参数,这个参数是一个函数,在执行完异步之后执行,可以将ref操作放到这里执行
4.React声明周期函数
生命周期函数指在某一个时刻被自动调用执行的函数
4.1 Mounting
componentWillMount
在组件即将被挂载之前执行,只会执行一次
componentDidMount
在组件被加载后执行,只会执行一次,在此可以调用AJAX请求
4.2 Updation
componentWillReceiveProps
当一个组件从父组件接收了参数,只要父组件的render函数被执行了,该函数就会被执行(第一次出现在父组件中不会被执行,如果这个组件之前已经存在于父组件中,才会执行)
shouldComponentUpdate
在组件即将被更新前执行,如果返回false,就会阻止数据更新
componentWillUpdate
组件被更新之前会被执行,但是在shouldComponentUpdate之后执行,如果shouldComponeUpdate返回true才会被执行
componentDidUpdate
组件更新后会被执行
4.3 Unmounting
componentWillUnmount
当组件即将被移出前自动执行
4.4 应用
shouldComponentUpdate
shouldComponentUpdate
可以传入两个参数,一个nextProps
一个nextState
,表示父组件改变时,即将顺应改变的子组件的props值和state值。当父组件发生执行render函数时,子组件也会重新render,此时只要使用该生命周期函数,通过判断即将更新的props和state的值,就可以选择子组件重新渲染与否,如:
1 | shouldComponentUpdate(nextProps, nextState) { |
5. 在React中使用axios
1 | import axios from 'axios' |
6. React中的过度动画
安装 react-transtion-group
一个React动画专用的动画库
1 | yarn add react-transtion-group |
6.1 CSSTranstion的使用
1 | import { CSSTranstion } from 'react-transition-group' |
入场动画的挂载的class:
.fade-enter
入场动画第一个时刻,但是还未入场,此时挂载该CSS1
2
3.fade-enter{
opacity: 0;
}.fade-enter-active
入场动画的第二个时刻,到入场动画执行完成之前的一个时刻,此时挂载该CSS1
2
3
4.fade-enter-active{
opacity: 1;
transition: opacity 1s ease-in
}.fade-enter-done
当整个过场动画执行完成之后执行,此时挂载该CSS1
2
3.fade-enter-done{
opacity: 1
}出场动画的挂载的class:
.fade-exit
、fade-exit-active
、fade-exit-done
跟入场动画的作用相似
6.2 apear参数
在 <CSSTransition>
标签中传入一个 appear={true}
就会在元素上添加额外的 appear
class,这个apper可以让元素在加载入页面的实行就执行相关的进入页面的动画,假如我们设定了一个元素进入的动画,元素在加载进页面的时候是出于显示状态,则进入动画不会被执行,只有让动画消失再出现的时候才会被执行。如果我们想要元素在被加载进页面的时候就执行进入动画,就可以开启 appear
参数,同时在css中这么设置:
1 | .fade-enter, .fade-appear{ |
6.3 TransitionGroup
假如我们要循环生成一些列表DOM,就可以用 TransitionGroup
来实现多个元素的切换动画效果,只需要在列表外层加一个 <TransitionGroup>
标签
1 | import { CSSTransition, TransitionGroup } from 'react-transition-group' |