Полный URL-адрес JSON в React Native

#react-native #api

Вопрос:

Я пытаюсь получить данные с этого веб-сайта: https://reactnative.dev/movies.json

Я использую следующий код:

 fetch("https://reactnative.dev/movies.json")
    .then(response => response.json())
    .then((responseJson) => {
        
        setTimeout(() => {
            this.setState({
                loading: false,
                dataSource: responseJson
            })
        }, 2000)

        Alert.alert(responseJson)

    })
    .catch(error => console.log(error))


    return (
        <FlatList
            data={DATA}
            renderItem={renderItem}
            keyExtractor={item => item.id}
            refreshControl={
                <RefreshControl refreshing={refreshing} onRefresh={this.onRefresh} tintColor={themes[theme].auxiliaryText} />
            }
        />

    
    );
};
 

Моя проблема в том, что Alert.alert (responseJSON) выдает следующую ошибку:
Эта ошибка

… и я хотел бы получить данные для плоского списка.

Кто мне поможет, пожалуйста?

Обновить:

 ...

constructor(props) {
        super(props);
        this.state = {
            moviesList: '',
        };
    }

... 
renderScroll = () => {
        const { moviesList } = this.state;

    fetch("https://reactnative.dev/movies.json")
        .then(response => response.json())
        .then((responseJson) => {
            
            setTimeout(() => {
                this.setState({
                    loading: false,
                    moviesList: responseJson.movies
                })
                Alert.alert(moviesList)
            }, 2000)
        })
        .catch(error => console.log(error))

...
 

Я хотел бы, чтобы Alert.alert получал данные. То есть извлеките данные из функции выборки.

Если внутри Alert.alert я помещу responseJSON.movies, если появятся данные, но если я помещу список фильмов, он не будет


Если я опубликую следующее в консоли браузера, он отправит мне неопределенную ошибку. Я просто хочу получать данные извне функции.

 fetch("https://reactnative.dev/movies.json")
.then(response => response.json())
.then((responseJson) => {

    setTimeout(() => {
        this.setState({
            loading: false,
            moviesList: responseJson.movies
        })

    }, 2000)
})
.catch(error => console.log(error))

alert(this.moviesList)
 

Ответ №1:

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

 Alert.alert(responseJson.title)
 

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

1. responseJSON.title работает, но он не работает, когда я ставлю responseJson.movies.id, Я получаю ошибку из изображения выше.

2. да, у вас может возникнуть та же проблема, когда вы поставите responseJson.movies.id поскольку reponseJson.movies-это объект массива, поэтому вам следует попробовать вот так. reponseJson.movies[0].идентификатор или вы можете выбрать индекс среди объекта массива с помощью функции «карта»

3. Ознакомьтесь с обновлениями моего поста, пожалуйста.

4. setState не возвращает значение сразу, поэтому вы можете попробовать сделать это следующим образом. this.setState( (загрузка: ложь, список фильмов: responseJSON.movies) => { Alert.alert(список фильмов[0]); }) пожалуйста, не помещайте список перемещений в Alert.alert (), так как это объект массива.

Ответ №2:

Я только что протестировал этот код, кажется, он работает. Это то, что вы ищете?

с помощью currElement у вас есть доступ к снимаемому объекту.

 import { useEffect, useState } from "react"
function Home() {
  const [isLoading, setLoading] = useState(true)
  const [data, saveData] = useState([])

  useEffect(() => {
    fetch("https://reactnative.dev/movies.json")
      .then(response => response.json())
      .then(responseJson => {
        console.log(responseJson.movies)
        saveData(responseJson.movies)
        setLoading(false)
      })
      .catch(error => console.log(error))
  }, [])
  console.log(data)

  return isLoading ? (
    <p> i am loading</p>
  ) : (
    <ul>
      {data.map(currElement => (
        <li key={currElement.id}> {currElement.title}</li>
      ))}
    </ul>
  )
}

 

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

1. Когда я пытаюсь таким образом, я получаю ошибку с крючком. Посмотрите на обновление, которое я сделал в своем посте. Я хочу получить данные из списка фильмов, использовать их вне функции.