私はReact Nativeでイメージギャラリーを作ろうとしています。React forループのonPress関数ネイティブナビゲーション
私が現在持っていることは、このようになりますサイトです。 imageView
画像は、このような配列で必要とされている唯一の9テスト画像です:私は今、欲しい
var imagesLoaded =
[
require('./image_1.jpg'),
require('./image_2.jpg'),
require('./image_3.jpg'),
require('./image_4.jpg'),
require('./image_5.jpg'),
require('./image_6.jpg'),
require('./image_7.jpg'),
require('./image_8.jpg'),
require('./image_9.jpg')
];
タップされた画像だけを黒い背景にして新しいページを開くことになる画像をタップすることである。
この
はギャラリーのためのコードです:class ImageView extends Component
{
static navigationOptions =
{
title: 'ImageView',
};
render()
{
const { navigate } = this.props.navigation;
var images = [];
for (var i = 0; i < 200; i++)
{
var imageString = 'Image #' + (i+1);
images.push(
<TouchableHighlight key={i} onPress={() => navigate('ImageTap', {imageSrc: imagesLoaded[i%9]})}>
<View style={styles.imageContainer}>
<Image source={imagesLoaded[i%9]} style={styles.images}/>
<Text style={styles.imageText}>{imageString}</Text>
</View>
</TouchableHighlight>
)
}
return (
<ScrollView>
<View style={{flex: 1, flexDirection: 'row', flexWrap: 'wrap', justifyContent: 'center'}}>
{images}
</View>
</ScrollView>
);
}
}
そして、これが開くようになっている新しいページのコードです:
class ImageTap extends Component
{
static navigationOptions =
{
title: 'ImageView',
};
render()
{
const { params } = this.props.navigation.state;
return (
<View style={{backgroundColor: 'black', flex: 1, flexDirection: 'row', justifyContent: 'center', alignItems: 'center'}}>
<Image source={params.imageSrc} style={{flex: 1}}/>
</View>
);
}
}
しかし、何が起こるかはその常に最後の画像でありますのループが開かれる。どのイメージがタップされているかにかかわらず、新しいページにイテレータiをパラメータとして渡してログすると、私は常に199を取得します。何が間違っていましたか?
ありがとうございました。 あなたのコードを実行しようとしましたが、ImageViewが完全に空になりました。私は間違いを見つけようとしましたが、のコンマを削除することを除いて、間違ったものは見つかりません –
あなたのコードだけを貼り付けて、画像コンポーネントを切り出しました。私は答えに書いたコードを実行しませんでした。正しいイメージを開くはずのギャラリーを実装する方法についてのアイデアです。あなたのコードの問題は、常に最後の値をとっているということだけです。しかし、私がコードを書いたやり方で、その問題を解決するはずです。このコードを使用する代わりに、ImageurlとコールバックをGalleryImageコンポーネントに渡すというアイデアを使用することができます。また、あなたはGallerImageコンポーネントの正しい小道具を取得しているかどうかを確認し、ログステートメントを入れてください。 –
また、画像が見えない場合は、スタイリングに問題がある可能性があります。 –