动画不触发重新渲染
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动画不触发重新渲染相关的知识,希望对你有一定的参考价值。
我有以下React Native代码。我在android上运行它,但还没有尝试其他设备。当它运行时,我按下按钮运行动画,可以看到参考值正在更新,并在我的addListener回调中打印到控制台。但似乎从来没有触发我的组件的重新渲染,即使endAngle被更新。所以,我的组件只渲染了一次,然后再也没有随着动画的变化而变化。我是否有什么明显的遗漏?
export default AnimatedDonutWrapper = (props) => {
let AnimatedDonut = Animated.createAnimatedComponent(DonutChart);
var endAngle = useRef(new Animated.Value(0.1)).current;
endAngle.addListener((data) => {
console.log(
'data: ' + JSON.stringify(data) + ' ' + JSON.stringify(endAngle),
);
});
function animate() {
Animated.timing(endAngle, {
toValue: 2 * Math.PI,
duration: 2000,
useNativeDriver: true,
}).start();
}
return (
<View
style={{flex: 1, justifyDirection: 'column', justifyContent: 'center'}}>
<View style={{flex: 1}}>
<AnimatedDonut
data={[2, 4, 6, 8]}
chartTranslate={[useWindowDimensions().width / 2, 150]}
innerRadius={70}
outerRadius={100}
startAngle={0}
endAngle={endAngle}
/>
</View>
<View
style={{
flex: 1,
alignItems: 'center',
}}>
<View style={{flex: 1, width: '50%'}}>
<Button title="Refresh" color="red" onPress={animate} />
</View>
</View>
</View>
);
};
答案
在我的例子中,一开始我就收到了需要将useNativeDriver设置为true的警告,所以我就这么做了。当我让代码 "工作 "的时候,useNativeDriver: True让它无法运行。我把它换成了false,然后我的动画就能正常运行了。我需要更多地研究这个问题,以更好地了解发生了什么,但现在它已经运行了。
以上是关于动画不触发重新渲染的主要内容,如果未能解决你的问题,请参考以下文章
Redux 状态发生了变化,为啥不触发重新渲染? (Redux 传奇)
React parent pass children 将触发重新渲染而不更改 state/props