#react-native
#react-native
Вопрос:
У меня есть плоский список, который возвращает несколько изображений. но я хочу показать изображение в другом представлении, щелкнув изображение из плоского списка. когда я нажимаю на изображение из плоского списка, это конкретное изображение будет показано в другом представлении. пожалуйста, предложите, как это сделать.
Вот мой плоский список:
<FlatList
data={this.state.images}
renderItem={this.renderGalleryImage}
keyExtractor={(item, index) => index}
horizontal={true}
/>;
renderGalleryImage = ({ item }) => {
return <Image source={item} style={styles.moreImg} />;
};
и вот вид, в котором я хочу отобразить
<View>
</View>
Ответ №1:
Вы можете подойти к этой проблеме несколькими способами; Самый простой способ — обернуть оператор renderGalleryImage
return осязаемым примитивом и добавить onPress
обработчик событий.
Вы можете использовать useState
хук в тандеме, чтобы сохранить выбранное Image
из плоского списка.
Вот пример фрагмента кода.
const [selectedItem, setSelectedItem] = useState("");
renderGalleryImage = ({ item }) => {
const setImage = () => setSelectedItem(item);
return (
<TouchableWithoutFeedBack onPress={() => setSelectedItem(item)}>
<Image source={item} style={styles.moreImg} />;
</TouchableWithoutFeedBack>
);
};
return <View>{selectedItem amp;amp; <Image source={{ uri: selectedItem }} />}</View>;
Примечание: Если вы используете компоненты на основе классов, следуйте этому подходу:
export default class App extends Component {
state = {
selectedImage: "",
};
renderGalleryImage = ({ item }) => {
const setImage = () => this.setState({ selectedImage: item.image });
return (
<TouchableWithoutFeedback onPress={setImage} style={{ margin: 30 }}>
<Image
source={{ uri: item.image }}
style={{ width: 100, height: 100 }}
/>
</TouchableWithoutFeedback>
);
};
render() {
const renderImage = () => (
<View>
<Image
source={{ uri: this.state.selectedImage }}
style={{ width: 100, height: 100,borderColor:'red',borderWidth:1 }}
/>
</View>
);
return (
<View>
<FlatList data={users} renderItem={this.renderGalleryImage} />;
<Text>Selected Image</Text>
{renderImage()}
</View>
);
}
}
Вот ссылка на рабочую демонстрацию на Expo.
Комментарии:
1. можете ли вы сказать мне, как добавить красную рамку, которая является выбранным изображением?
2. Я хочу добавить границу в изображение из плоского списка, которое выбрано