react-native:禁用动画

时间:2017-07-19 03:23:10

标签: animation react-native

我们正在大量使用Animatedreact-native-animatable,并开始注意到某些旧设备的速度缓慢。所有动画设置为useNativeDriver,这使我们相信我们可能会有太多动画。

有没有办法覆盖Animated原型来完全禁用动画?我调查了这一点,看起来并不简单。

我考虑的另一个选择是留下我的淡入淡出动画但是将constructor中的初始值设置为最终值。这种方法肯定不会显示任何动画,但它还会绕过原生桥中的动画,因为值不会改变吗?

class Item extends Component {
  constructor(props) {
    super(props);
    this.state = {
      opacity: 1 // Notice how this is set to 1
    }
  }

  componentDidMount() {
    setTimeout(() => {
      this.setState({opacity: 1})
    }, 1000)
  }


  render() {
    return (
      <Animatable.View style={{opacity}} easing='ease-in' transition='opacity' duration={500} useNativeDriver={true} />
    )
  }

}

1 个答案:

答案 0 :(得分:1)

只需为它创建一个包装组件,然后使用它而不是Animated.View

export default const AnimatedViewWrapper = (props) => {
   if (/* slow device check */) {
      return React.createElement(View, props)
   } else {
      return React.createElement(Animated.View, props)
   }
}

您可能需要过滤收到的道具,因为View没有Animated.View所拥有的许多道具。您可以通过View.propTypes获取它们。仅当__DEV__为真时,您可能需要执行此操作,因为propTypes在生产版本中被删除