我们正在大量使用Animated
和react-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} />
)
}
}
答案 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在生产版本中被删除