невозможно установить состояние с помощью expo-image-picker

#react-native #expo

#react-native #expo

Вопрос:

Я пытаюсь разрешить пользователю выбирать изображение из галереи, а затем передавать изображение на следующий экран в качестве параметра, где они могут завершить свой пост (аналогично потоку создания Instagram).

Используя expo image picker, можно нажать кнопку, которая открывает галерею и позволяет пользователю выбрать изображение, а галерея закрывается. Это делается с помощью этого кода:

 async openImagePickerAsync() {
    let permissionResult = await ImagePicker.requestCameraRollPermissionsAsync();

    if (permissionResult.granted === false) {
      alert("Permission to access camera roll is required!");
      return;
    }

    let pickerResult = await ImagePicker.launchImageLibraryAsync()

    console.log(pickerResult.uri)
    
    if (pickerResult.cancelled === true) {
        return;
    }

    this.setPicked(pickerResult);
};
  

Консоль регистрирует uri, все отлично. Изображение выбрано. Проблема начинается с вызова функции this.setPicked, где я просто подтверждаю, что изображение было выбрано, и устанавливаю состояние:

 setPicked = (pickerResult) => {
    console.log("called setPicked")

    if (pickerResult !== null) {
        console.log("pickerResult not null")
        this.setState({
            image: pickerResult.uri
        }).bind(this)
        console.log(pickerResult.uri)
        console.log(this.state.image)
     }
     else {
        console.log("pickerResult is null")
         return;
     }
}
  

Ни один из операторов печати не печатается, и я получаю это предупреждение в консоли:

 [Unhandled promise rejection: TypeError: undefined is not an object (evaluating 'this.setPicked')]
  

Есть идеи, что происходит? Спасибо

Ответ №1:

Похоже, что функция openImagePickerAsync не имеет доступа к «этому»

измените его на функцию со стрелкой, как показано ниже, и она должна работать.

  openImagePickerAsync = async ()=> {
  

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

1. Ну, вам нужно привязать это или использовать функцию со стрелкой, чтобы получить доступ к контексту, обратитесь к этому freecodecamp.org/news /…