Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.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
Javascript React不会在贴图函数中渲染元素_Javascript_Reactjs - Fatal编程技术网

Javascript React不会在贴图函数中渲染元素

Javascript React不会在贴图函数中渲染元素,javascript,reactjs,Javascript,Reactjs,我试图从贴图函数渲染元素,但它似乎不起作用。我试图改变回报,但似乎没有任何效果 class API extends Component { myTop10Artists() { Api.getMyTopArtists(function (err, data) { if (err) { console.error(err); } else { console.log(data.items); return data

我试图从贴图函数渲染元素,但它似乎不起作用。我试图改变回报,但似乎没有任何效果

class API extends Component {
  myTop10Artists() {
    Api.getMyTopArtists(function (err, data) {
      if (err) {
        console.error(err);
      } else {
        console.log(data.items);
        return data.items.map((artist) => {
          console.log("artist name " + artist.name);
          console.log("artist id " + artist.id);
          console.log("artist popularity " + artist.popularity);
          return (
            <div key={artist.id} className="card">
              <div key={artist.id} className="cardContent">
                <h3> {artist.name} </h3>{" "}
              </div>{" "}
            </div>
          );
        });
      }
    });
  }
  render() {
    return <div className="cardsWrap"> {this.myTop10Artists()} </div>;
  }
}
将项目存储在状态中,并使用api响应进行更新。这将导致您的组件重新加载

另外,将api调用移动到组件挂钩

componentDidMount(){
  Api.getMyTopArtists(function (err, data) {
      this.setState({
           items: data.items
       })
   }
将项目存储在状态中,并使用api响应进行更新。这将导致您的组件重新加载

另外,将api调用移动到组件挂钩

componentDidMount(){
  Api.getMyTopArtists(function (err, data) {
      this.setState({
           items: data.items
       })
   }

这不起作用,因为您正在从回调返回数据,而需要使用This.setstate将获取的数据存储到您的状态,然后显示它

class API extends Component {
  constructor(props){
    super(props);
    this.state = {
      data: null,
      error: null
    }
    this.myTop10Artists = this.myTop10Artists.bind(this);
  }
  
  componentDidMount(){
    this.myTop10Artists();
  }
  
  myTop10Artists() {
    Api.getMyTopArtists(function (err, data) {
      if (err) {
        this.setState({...this.state, error: err});
      } else {
        this.setState({error: null, data})
      }
    });
  }
  
  render() {
    const {error, data} = this.state;
    if(error){
      return <div>Error! Try again</div>
    }
    
    if(!data){
      return <div>Loading..</div>
    }
    
    return (
      <div>
         data.items.map((artist) => (
            <div key={artist.id} className="card">
              <div key={artist.id} className="cardContent">
                <h3> {artist.name} </h3>{" "}
              </div>{" "}
            </div>
        ))
      </div>
    )
  }
}

这不起作用,因为您正在从回调返回数据,而需要使用This.setstate将获取的数据存储到您的状态,然后显示它

class API extends Component {
  constructor(props){
    super(props);
    this.state = {
      data: null,
      error: null
    }
    this.myTop10Artists = this.myTop10Artists.bind(this);
  }
  
  componentDidMount(){
    this.myTop10Artists();
  }
  
  myTop10Artists() {
    Api.getMyTopArtists(function (err, data) {
      if (err) {
        this.setState({...this.state, error: err});
      } else {
        this.setState({error: null, data})
      }
    });
  }
  
  render() {
    const {error, data} = this.state;
    if(error){
      return <div>Error! Try again</div>
    }
    
    if(!data){
      return <div>Loading..</div>
    }
    
    return (
      <div>
         data.items.map((artist) => (
            <div key={artist.id} className="card">
              <div key={artist.id} className="cardContent">
                <h3> {artist.name} </h3>{" "}
              </div>{" "}
            </div>
        ))
      </div>
    )
  }
}

只是一个如何用钩子和功能组件以另一种方式实现的想法。正如其他人已经提到的,代码中的主要问题是回调不会返回结果,也不会将结果设置为状态

常数MyTop10Artists==>{ const[artists,setArtists]=useState[]; const[isLoading,setIsLoading]=useStatetrue; const[error,setError]=useState; useEffect=>{ Api.getMyTopArtistserr,数据=>{ 如果出错{ console.error; setErrorerr; 回来 } setArtistsdata.items; setIsLoadingfalse; }; }, []; 回来 {isLoading&&Loading} {error&&error} {!isLoading&&Artisters.length==0&&No Artisters} {!正在加载&& artists.mapartist=> {艺术家名称} } ; }; 常量API==> ;
只是一个如何用钩子和功能组件以另一种方式实现的想法。正如其他人已经提到的,代码中的主要问题是回调不会返回结果,也不会将结果设置为状态

常数MyTop10Artists==>{ const[artists,setArtists]=useState[]; const[isLoading,setIsLoading]=useStatetrue; const[error,setError]=useState; useEffect=>{ Api.getMyTopArtistserr,数据=>{ 如果出错{ console.error; setErrorerr; 回来 } setArtistsdata.items; setIsLoadingfalse; }; }, []; 回来 {isLoading&&Loading} {error&&error} {!isLoading&&Artisters.length==0&&No Artisters} {!正在加载&& artists.mapartist=> {艺术家名称} } ; }; 常量API==> ;
只需返回api调用?就要说相同的,或者使用状态。顺便说一句,我会在渲染部分移动整个贴图或将其提取到它自己的组件中,该类上的函数进入渲染函数感觉像是一个反模式API调用很可能是异步的,但重点仍然是myTop10Artists不会返回任何内容,因此,您不应该期望它会这样做。我鼓励您对从Api.getMyTopArtists返回的数据使用state。由于它是一个异步函数,难怪没有任何东西可以用你的代码呈现。@Wishal看一下我关于使用自己的组件的回答,我没有得到更多数据的参数,因此函数的使用只是返回api调用?将要说同样的话,或者使用状态。顺便说一句,我会在渲染部分移动整个贴图或将其提取到它自己的组件中,该类上的函数进入渲染函数感觉像是一个反模式API调用很可能是异步的,但重点仍然是myTop10Artists不会返回任何内容,因此,您不应该期望它会这样做。我鼓励您对从Api.getMyTopArtists返回的数据使用state。由于它是一个异步函数,难怪没有任何东西可以用你的代码呈现。@Wishal看看我关于使用自己的组件的回答,我没有得到更多数据的参数,因此使用一个函数就是如何在react中获取数据,以实现状态视图心智模型。您有一个初始状态,更新此状态,然后显示它。此外,您可能希望更轻松地尝试使用React钩子。在使用此钩子之前,您应该调用superprops。superprops应该位于顶部,制作一个编辑器。这就是您在React中获取数据的方式,以实现状态视图心智模型。您有一个初始状态,更新此状态,然后显示它。另外,您可能想更轻松地尝试使用React钩子。在使用之前,您应该调用superprops。superprops应该位于顶部,进行编辑