Как передать ответ выборки в параметрах навигации?

#react-native

#react-native

Вопрос:

В моем экранном поиске я создаю выборку, которая возвращает json в качестве ответа. Я устанавливаю этот ответ в качестве параметра для перехода к экрану B. Как лучше всего создать этот параметр?

Я только что отправил ответ, но на другой стороне он не определен!

 fetch(this.endPoint, {
            method: "GET",
            headers: null,
        }).then(response => response.json())
            .then(response => {
                console.log('the result is');
                console.log(response);

                this.props.navigation.navigate("Available", {'searchResult' : response})
            })
  
 // in screen B
render() {
        let list = this.props.navigation.getParam('searchResult');
        console.log(this.list); // returns undefined
        return (
            .....
        );
    }
  

Ожидаемый результат: получение Json
Фактический результат: получение неопределенного

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

1. console.log(list) без this ключевого слова

Ответ №1:

list по сути, это переменная внутри render() метода. Таким образом, вы можете вызвать его напрямую, без использования объекта instance this .

 console.log(list);
  

Также, поскольку вы используете getParam , будет лучше, если вы вызовете его с резервным значением по умолчанию для вашего, list на случай, если это так undefined . Например, предполагается, что if list представляет собой массив значений,

 let list = this.props.navigation.getParam('searchResult', []);
  

Ответ №2:

Попробуйте это:

 fetch(this.endPoint, {
        method: "GET",
        headers: null,
    }).then(response => response.json())
    .then(response => {
        console.log('the result is');
        console.log(response);
        /* 1. Navigate to the Available route with params */
        this.props.navigation.navigate('Details', {
            searchResult: response,
        });
    })
  

И считывать параметры из доступного маршрута:

  const list = navigation.getParam('searchResult', 'some default value');
 console.log(list); // without this