簡體   English   中英

如何使用react從github API獲取用戶倉庫?

[英]How to get the user repo from github API using react?

我有一個react應用程序,它使用github api在github上搜索用戶。 我有搜索用戶工作正常的部分,但是當我添加一個組件以顯示用戶的存儲庫時,它僅顯示用戶信息,並且控制台顯示此錯誤: Uncaught (in promise) TypeError: Cannot read property 'value' of undefined

這是我的代碼:

    class GitHubSearch extends React.Component {
       constructor(props){ 
         super(props); 
          this.state = { 
           username: '',
           userrepo: '',
          };
       }

       getUser(username) {
          return fetch(`https://api.github.com/users/${username}`)
          .then(response => response.json())
          .then(response => {
            return response;
           })
      }

       getUserRepo(userrepo) {
         return fetch(`https://api.github.com/users/${username}/repos`)
         .then(response => response.json())
         .then(response => {
          return response;
        })
      }

       async handleSubmit(e) {
           e.preventDefault();
           let user = await this.getUser(this.refs.username.value);
           this.setState({ avatar_url: user.avatar_url,
           username: user.login,
           followers: user.followers,
           following: user.following,
            url: user.url,
       });

     let repo = await this.getUserRepo(this.refs.userrepo.value);
        this.setState({ name: repo.name,
        description: repo.description,
        git_url: repo.git_url,
        stargazers_count: repo.stargazers_count,
        forks_count: repo.forks_count,
        open_issues_count: repo.open_issues_count,
        size: repo.size,

     })

  }

     render() {
       let user;
       if(this.state.username) {
          user = 
          <div className="resultBadge">
            <img src={this.state.avatar_url}/>
            <p className="userInfo">
             Username: <br/>
             {this.state.username} 
            </p> 
            <p className="followerInfo">
             {this.state.followers} Followers
            </p>
            <p className="followingInfo">
              Following {this.state.following} users
            </p>
          </div>
      }

      let repo;
        if(this.state.userrepo) {
           repo =
             <div className="repoResults">
                <p>
                  {this.state.name}
               </p>
             </div>
         }

           return (
              <div className="GitHubSearch">
                <header className="Search-header">
                  <h1>Github User Search </h1>
                </header>
                <form onSubmit={e => this.handleSubmit(e)}>
                   <input ref='username' type='text' placeholder='username' />
               </form>
               <p className="Search-intro">
                  {user}
               </p>
      <p>
        {repo}
       </p>
      </div>
   );
 }
}


ReactDOM.render(<GitHubSearch/>, document.getElementById('container'));

HTML是:

這里缺少什么嗎?

實際上,您沒有userrepo ref。

可能應該使用相同的ref來獲取存儲庫,因為您的getUserRepo獲取的是username屬性,而不是存儲庫名稱。

因此,您的getUserRepo函數應如下所示:

let repo = await this.getUserRepo(this.refs.username.value);
        this.setState({ name: repo.name,
        description: repo.description,
        git_url: repo.git_url,
        stargazers_count: repo.stargazers_count,
        forks_count: repo.forks_count,
        open_issues_count: repo.open_issues_count,
        size: repo.size,

     })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM