5つのアイコンからなるReact Nativeコンポーネントを作成しました。 アイコンはクリック可能で、クリックされたアイコンをアニメートしたいと思います。React Native:いくつかの要素のうちの1つのみをアニメ化する
私の問題は:アイコンをクリックすると、すべてのアイコンがアニメーション化されます。これはループで生成され、すべて同じプロパティが与えられているためです。
私は何らかの理由で押されたアイコンをアニメーション化できるようにコンポーネントを設定できますか?
ここでは、コンポーネントの:
import React from 'react';
import { StyleSheet, Animated, View, Text, TouchableHighlight, } from 'react-native';
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
const AnimatedIcon = Animated.createAnimatedComponent(Icon);
export class IconRow extends React.Component {
constructor(props) {
super(props);
this.state = { iconFontSize: new Animated.Value(50) };
}
onIconPress = (index) => {
Animated.sequence([
Animated.timing(this.state.iconFontSize, { toValue: 40, duration: 100 }),
Animated.timing(this.state.iconFontSize, { toValue: 58, duration: 100 }),
Animated.timing(this.state.iconFontSize, { toValue: 50, duration: 100 }),
]).start();
}
renderIcons() {
var icons = [];
for (var i = 0; i < 5; i++) {
icons.push(
<TouchableHighlight key={i} underlayColor="transparent" onPress={this.onIconPress.bind(this, i)}>
<AnimatedIcon name="heart" style={{fontSize:this.state.iconFontSize, color: "red"}} />
</TouchableHighlight>
);
}
return icons;
}
render() {
return (
<View style={{flexDirection: "row"}}>
{this.renderIcons()}
</View>
);
}
}
はスナック:https://snack.expo.io/HJJ0Edhlz
これはうまくいくはずですが、状態を変更する代わりに配列に格納し、 'setState'を使ってループの後の状態を更新する必要があります。 –
@Matt Aft私があなたが提案していたものの上で行った変更はありますか? – trevor
ええ、ちょうど連結する必要はありませんでした。私はちょうどその部分を編集しましたが、それ以外のものはすべてよく見えます –