代码之家  ›  专栏  ›  技术社区  ›  3Dos

淡出并卸下带有反应弹簧的加载屏幕组件

  •  0
  • 3Dos  · 技术社区  · 8 年前

    我正在努力 react-spring 淡出加载屏幕,然后卸载它。

    组件卸载,但没有动画,我无法理解为什么。我创建了一个沙盒来说明:

    https://codesandbox.io/s/nkxjxwo2xl

    import React from 'react'
    import ReactDOM from 'react-dom'
    import { Transition } from 'react-spring'
    
    class Loader extends React.PureComponent {
      state = { loaded: false }
    
      componentDidMount() {
        setTimeout(() => {
          this.setState({ loaded: true })
        }, 1000)
      }
    
      render() {
        const { percentage } = this.props
        const styles = {
          height: '100vh',
          width: '100vw',
          background: 'tomato'
        }
        return (
          <Transition native from={{ opacity: 1 }} leave={{ opacity: 0 }}>
            {!this.state.loaded &&
              (style => (
                <div style={Object.assign({}, styles, style)}>
                  <div>{Math.round(percentage)} %</div>
                </div>
              ))}
          </Transition>
        )
      }
    }
    
    ReactDOM.render(<Loader percentage={0} />, document.getElementById('root'))
    

    没有 react-spring 但是,如果有人能创建一个标签,我认为这会很有帮助。

    2 回复  |  直到 8 年前
        1
  •  1
  •   hpalu    8 年前

    是的,您自己修复了它,animated.div组件丢失了。不过,我建议您使用它。即使您的视图很小,它仍然会每秒通过react呈现60次(这意味着它将经历所有组件阶段60次+渲染)。对于本机集,它只渲染一次,动画将直接在DOM中的requestAnimationFrame循环中应用(通过instance.style.setproperty,它完全跳过react,这会在应用程序变大后产生不同。

        2
  •  0
  •   3Dos    8 年前

    如果有人发现这个问题,我就找到了解决办法。

    使用本机属性,您需要使用 animated.div (或任何动画组件)以使其动画化。或者简单地删除本机属性。在我的例子中,它是一个不经常显示的加载器,因此我只需删除本机属性就可以更容易地进行操作。

    More info on the Spectrum react-spring community