Есть ли способ сохранить выборку в функции?

#javascript #react-native #fetch

Вопрос:

Я написал этот код в собственном проекте react, а не в компоненте, мне нужно только сохранить массив:

 fetch(url, {})
    .then(res => res.json())
    .then(data => console.log(data))
 

И все работает, но я хотел бы сохранить то, что я напечатал. Вместо console.log(data) этого я попытался использовать const newData = data , но, распечатав его, я заметил, что получил undefined .

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

1. вам нужно использовать состояние, reactjs.org/docs/state-and-lifecycle.html

2. Я тестирую этот код отдельно, моя цель-сохранить массив, напечатанный с console.log(data) помощью переменной

Ответ №1:

если вы используете метод выборки в компоненте react, затем используйте состояние для хранения ответа, а если вы используете метод выборки в файле действий, вам необходимо использовать контекстный API, redux и т. Д

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

1. Я не пытаюсь использовать fetch methon в компоненте реакции. Моя цель — сохранить этот массив в переменной

Ответ №2:

Чтобы сохранить данные, вот что я бы рекомендовал.

Сначала вы можете расширить:

.then(data => console.log(data))

в:

 .then((data) =>{
  console.log(data)
}
 

Таким образом, у нас есть больше строк для написания кода.
Потому .then() что функция-это функция со стрелкой

Затем мы можем инициализировать переменную в верхней newData части, а затем установить данные, равные этой data переменной внутри позже. Кроме того, я заметил, что вы установили newData переменную с ключевым const словом . const является неизменяемым инициализатором, что означает, что он может быть установлен только один раз и не может быть сброшен. Вместо этого используйте let ключевое слово. Наш код сейчас выглядит так:

 let newData;
fetch(url, {})
    .then(res => res.json())
    .then(data => {
       console.log(data)
       newData = data;
       console.log(newData)
     })
 

Теперь там хранятся новые данные. Если вы хотите получить новые данные console.log за пределами .then() функции, вам нужно будет подключиться async к вашей fetch() функции, чтобы она стала : async fetch() . Подробнее об асинхронности здесь.

Ответ №3:

Вам все равно нужно использовать состояние, как я уже сказал в комментарии

Вот пример

 constructor(props) {
    super(props);
    this.state = {
      data: []
    };
  }

 

тогда на тебе принеси

 
fetch(url, {})
    .then(res => res.json())
    .then(data => {
      this.setState({
        data: data
      });
    });
)
 
 

Тогда this.state.data есть ли то, что было получено от fetch