Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native Can';t在未安装的组件上执行React状态更新。取消useEffect中的所有任务_React Native_Memory Leaks_Undefined_React Hooks - Fatal编程技术网

React native Can';t在未安装的组件上执行React状态更新。取消useEffect中的所有任务

React native Can';t在未安装的组件上执行React状态更新。取消useEffect中的所有任务,react-native,memory-leaks,undefined,react-hooks,React Native,Memory Leaks,Undefined,React Hooks,我发现这是一个常见的错误,我尝试了不同的解决方案,但没有结果 到目前为止,这是我的代码,很少工作,提取返回正确的电影数组,但大多数情况下返回错误: import React, { useState, useEffect } from "react"; import { Text, View, Image, ScrollView, ActivityIndicator } from "react-native"; function Dashboard() { const [loading,

我发现这是一个常见的错误,我尝试了不同的解决方案,但没有结果

到目前为止,这是我的代码,很少工作,提取返回正确的电影数组,但大多数情况下返回错误:

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;
import React,{useState,useffect}来自“React”;
从“react native”导入{文本、视图、图像、滚动视图、活动指示器};
函数仪表板(){
const[loading,setLoading]=useState(true);
常量[popularMovies,setPopularMovies]=useState([])
康斯特普罗马维耶尔酒店=
".....";
常量fetchMovies=()=>{
取回(普罗旺维尔)
.then(res=>res.json())
.然后(设置PopularMovies)
.然后(console.log(popularMovies));
};
useffect(()=>{
获取电影();
}, []);
const{results}=popularMovies;
退货(

引用从获取中返回的流行电影似乎是个问题。请将您的popularMovies状态设置为从获取中返回的
results
属性,而不是JSON属性

因此,改变:

.then(setPopularMovies)

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


然后删除results变量并直接引用popularMovies。

引用从fetch返回的流行电影似乎是个问题。将popularMovies状态设置为fetch中的
results
属性,而不是JSON的属性

因此,改变:

.then(setPopularMovies)

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


然后删除results变量并直接引用popularMovies。

您能发布整个错误消息吗?目前我所能想到的是,在fetchMovies完成之前,该组件正在卸载,这意味着您最终尝试在一个已卸载的组件上设置popularMovies,但我觉得这是另一回事。错误发生在sage可能会有所启发!另一方面,我注意到您正在使用
const{results}解构=popularMovies
当popularMovies实际上是一个数组时,根据顶部的
useState
。未定义的错误不是一个对象,但在屏幕上没有任何渲染的情况下出现的黄色警告表示:无法对未安装的组件执行React状态更新。这是一个no操作,但它表明您的内存泄漏应用程序。若要修复,请取消useEffect清理函数中的所有订阅和任务。在我上面发布的图像中,有返回的json,我只需要访问结果数组,但奇怪的是,有时会正常工作并正确呈现卡,但大多数时间不会。您可以尝试记录该提取的每个步骤吗,然后(resJson=>setPopularMovies(resJson.results))
,然后去掉
results
变量,直接使用popularMovies。那么至少你的popularMovies是一个一致的类型。天哪,这就是问题所在,这是正确的:。然后(resJson=>setPopularMovies)(resJson.results))谢谢你,哈。我将把它作为答案发布:)你能发布整个错误消息吗?目前我所能想到的是,该组件在fetchMovies完成之前正在卸载,这意味着你最终会试图在一个未安装的组件上设置PopularMovies,但我觉得这是另外一回事。错误消息可能会有所启发!我注意到你正在解构with
const{results}=popularMovies
当popularMovies实际上是一个数组时,根据顶部的
useState
。未定义的错误不是一个对象,但在屏幕上没有任何渲染的情况下出现的黄色警告表示:无法对未安装的组件执行React状态更新。这是一个no操作,但它表明您的内存泄漏应用程序。若要修复,请取消useEffect清理函数中的所有订阅和任务。在我上面发布的图像中,有返回的json,我只需要访问结果数组,但奇怪的是,有时会正常工作并正确呈现卡,但大多数时间不会。您可以尝试记录该提取的每个步骤吗,然后(resJson=>setPopularMovies(resJson.results)),然后去掉
results
变量,直接使用popularMovies。那么至少你的popularMovies是一个一致的类型。天哪,这就是问题所在,这是正确的:。然后(resJson=>setPopularMovies)(resJson.results))谢谢你,哈。我将把它作为答案发布:)