Как изменить изображение при нажатии кнопки на Expo?

#reactjs #expo

#реагирует на #Экспо

Вопрос:

Я пытаюсь создать приложение, которое показывает фотографии кошек на выставке. У меня есть фотография кошки, которая отображается изначально. У меня есть кнопка, и когда я нажимаю на нее, я хочу изменить отображаемое изображение кошки. Вот что у меня есть:

 let imageUri = {uri: 'https://images.unsplash.com/photo-1615789591457-74a63395c990?ixlib=rb-1.2.1amp;ixid=MnwxMjA3fDB8MHxzZWFyY2h8MXx8ZG9tZXN0aWMlMjBjYXR8ZW58MHx8MHx8amp;w=1000amp;q=80'};   

Я определяю функцию, которая изменяет imageUri значение:

 const displayImage = async () =gt; {  imageUri = {uri: 'https://images.unsplash.com/photo-1529778873920-4da4926a72c2?ixlib=rb-1.2.1amp;ixid=MnwxMjA3fDB8MHxzZWFyY2h8MXx8Y3V0ZSUyMGNhdHxlbnwwfHwwfHw=amp;w=1000amp;q=80'} }  

Затем внутри return() я делаю следующее:

 lt;View style={styles.container}gt;  lt;ImageBackground  source={require('./assets/images/background.png')}  style={styles.image}  /gt;  lt;Text style={styles.text}gt; Here is a cat picture lt;/Textgt;  lt;Button  style = {styles.button}  title="Display"  onPress = {() =gt; displayImage()}  /gt;  lt;Image source={imageUri} style = {{width: 155, height: 259}} /gt;  lt;/Viewgt;  

Однако это не обновляет картину.

Ответ №1:

Причина, по которой ваше изображение не меняется, заключается в том, что состояние компонента не меняется. Чтобы решить эту проблему, вам необходимо управлять состоянием данных компонентов. Вы можете сделать это с помощью состояния использования крючка.

Обязательно импортируйте крючок useState.

 import {useState} from 'react';  

Затем вы можете установить управляемую переменную состояния для своего изображения.

 const [imageUri, setImageUri] = useState(   'https://images.unsplash.com/photo-1615789591457-74a63395c990?ixlib=rb-1.2.1amp;ixid=MnwxMjA3fDB8MHxzZWFyY2h8MXx8ZG9tZXN0aWMlMjBjYXR8ZW58MHx8MHx8amp;w=1000amp;q=80' );  

Затем все, что вам нужно, — это обновить событие нажатия кнопки, чтобы вызвать переключатель состояний, чтобы установить новое изображение в состояние. Поэтому, когда изображение изменяет состояние компонентов, оно обновляется с помощью нового изображения.

 lt;View style={styles.container}gt;  lt;ImageBackground  source={require('./assets/images/background.png')}  style={styles.image}  /gt;  lt;Text style={styles.text}gt; Here is a cat picture lt;/Textgt;  lt;Button  style = {styles.button}  title="Display"  onPress = {() =gt; setImageUri('https://images.unsplash.com/photo-1529778873920-4da4926a72c2?ixlib=rb-1.2.1amp;ixid=MnwxMjA3fDB8MHxzZWFyY2h8MXx8Y3V0ZSUyMGNhdHxlbnwwfHwwfHw=amp;w=1000amp;q=80')}  /gt;  lt;Image source={imageUri} style = {{width: 155, height: 259}} /gt; lt;/Viewgt;  

Комментарии:

1. Большое вам спасибо! Однако source={imageUri} его необходимо заменить, source={{uri: imageUri}} чтобы он работал должным образом.