场景:我在屏幕上渲染了一个svg circle
和一个。state
我也有两个按钮。Change Size
按钮将圆圈的大小(共享值)从 50 更改为 100 或从 100 更改为 50。更改状态按钮将状态从“苹果”更改为“橙色”或“橙色”更改为“苹果”。[注意:动画不以任何方式使用状态。我也在控制台记录size.value
每次重新渲染]
问题:一旦按下按钮,它会将Change Size
圆圈的动画从 50 变为 100。现在,如果按下Change State
按钮,它会改变状态,但也会使圆圈的大小回到 50,尽管我们的日志显示共享值size.value
仍然是 100 .
预期行为:预期圆的大小保持 100,因为这是提供给圆的共享值。
代码:
import React, {useState, useEffect} from 'react';
import { Text, View, Button} from 'react-native';
import Animated, {
useAnimatedProps,
useSharedValue,
withSpring,
} from 'react-native-reanimated';
import Svg, {Circle} from 'react-native-svg';
const App = () => {
const [state, setState] = useState('apple');
const size = useSharedValue(50);
const animatedProps = useAnimatedProps(() => {
return {
r: size.value / 2,
};
});
const AnimatedCircle = Animated.createAnimatedComponent(Circle);
useEffect(() => {
console.log('size.value =', size.value);
});
return (
<View style={{flex: 1}}>
<Svg height={100} width={100}>
<AnimatedCircle
cx="50"
cy="50"
fill="green"
animatedProps={animatedProps}
/>
</Svg>
<Text>{state}</Text>
<Button
title="Change Size"
onPress={() => {
size.value = withSpring(size.value === 50 ? 100 : 50);
}}
/>
<Button
title="Change State"
onPress={() => {
setState(state === 'apple' ? 'orange' : 'apple');
}}
/>
</View>
);
}
export default App;
任何帮助将非常感激