Не удается выполнить обновление состояния React для неустановленного компонента. Отмените все задачи в useEffect - PullRequest
1 голос
/ 08 января 2020

Я видел распространенную ошибку, и я пробовал разные решения безрезультатно.

Это мой код до сих пор, редко работает, и выборка возвращает правильный массив фильмов, но в большинстве случаев это отправив обратно ошибку:

import React, { useState, useEffect } from "react";
import { Text, View, Image, ScrollView, ActivityIndicator } from "react-native";

function Dashboard() {
   const [loading, setLoading] = useState(true);
   const [popularMovies, setPopularMovies] = useState([])

   const popularMoviesUrl =
       ".....";

   const fetchMovies = () => {
    fetch(popularMoviesUrl)
     .then(res => res.json())
     .then(setPopularMovies)
     .then(console.log(popularMovies));
   };

   useEffect(() => {
       fetchMovies();
   }, []);

   const { results } = popularMovies;

      return loading ? (
         <View style={styles.loader}>
            <ActivityIndicator size="large" color="#dcae1d" animating />
         </View>
   ) : (
      <ScrollView horizontal style={styles.container}>
         {results.map(movie => (
            <View key={movie.id}>
            <Text style={styles.container}>{movie.title}</Text>
            <Image
                style={styles.poster}
                source={{
                    uri: `https://image.tmdb.org/t/p/w500${movie.poster_path}`
            }}
          />
        </View>
      ))}
      <Text>thfh</Text>
    </ScrollView>
   );
  }

  export default Dashboard;

returned json

1 Ответ

0 голосов
/ 08 января 2020

Кажется, проблема со ссылками на популярные фильмы, возвращенные из вашей выборки Установите для вашего состояния PopularMovies свойство results из выбранной вами выборки, а не для JSON.

Так измените:

.then(setPopularMovies)

на ...

.then(resJson => setPopularMovies(resJson.results))

Затем удалите переменную результатов и ссылку Популярные фильмы напрямую.

...