import React, {Component} fro'react' import PropTypes from 'prop-types' import Animated from 'animated/lib/targets/react-dom' class Loader extends Component { constructor(props) { super(props); const animate = new Animated.Value(0); animate.addListener(this.changeOpacity.bind(this)); this.state = { animate: animate, value: 0 } } changeOpacity({value}) { if (value === 0) this.setState({value: 0}); } componentDidUpdate(prevProps) { const {active} = this.props; if (!prevProps.active && active) { this.state.animate.setValue(0.58); this.setState({value: 0.58}); } else if (prevProps.active && !active) { Animated.timing(this.state.animate, {toValue: 0}).start(); } } render() { const {text} = this.props; if (this.state.value === 0) return false; return ( <div> <Animated.div className="page-block" style={{opacity: this.state.animate}} /> <div className="loading-text">{text}</div> <div className="loading-wrapper"> <div className="spinner"> <div className="double-bounce1"/> <div className="double-bounce2"/> </div> </div> </div> ) } } Loader.propTypes = { // 加载的文本 text: PropTypes.string.isRequired, // 是否激活状态 active: PropTypes.bool.isRequired }; Loader.defaultProps = { text: 'Loading', active: false }; export default Loader
使用
<Loader active={this.state.status}/>