簡單易懂的React魔法(27):使用戶名可點(diǎn)擊:我的做法

我希望借此機(jī)會你自己編寫了代碼,因?yàn)檫@樣做真的有助于在頭腦中理清思路炕吸。無論如何我說過我會寫一個方案的幔睬。所以在這里:(注意:如果你的寫法和我的寫法里有很大不同,那還是改用我的寫法吧览闰,以便于可以繼續(xù)遵循本教程。)首先巷折,創(chuàng)建文件User.js压鉴,內(nèi)容如下:

src/pages/User.js

import React from 'react';
import ajax from 'superagent';

class User extends React.Component {
    constructor(props) {
        super(props);

        this.state = {
            events: []
        };
    }

    componentWillMount() {
        ajax.get(`https://api.github.com/users/${this.props.match.params.user}/events`)
            .end((error, response) => {
                if (!error && response) {
                    this.setState({ events: response.body });
                } else {
                    console.log(`Error fetching user data.`, error);
                }
            }
        );
    }

    render() {
        return (<div>
            <p>Content for {this.props.match.params.user} to go here.</p>
        </div>);
    }
}

export default User;

這只是我們Detail組件的縮減版本。為了更加簡化锻拘,我已經(jīng)將Ajax調(diào)用轉(zhuǎn)移到componentWillMount()油吭。因?yàn)槲覀冎辉谶@里請求數(shù)據(jù),現(xiàn)在render里面還什么都沒有署拟,我們現(xiàn)在就寫上婉宰。

在這之前我想先配置一下新頁面的路由。你應(yīng)該注意到我在上面的代碼里用了this.props.match.params.user兩次推穷,那你就該很容易看懂App.js里路由怎么寫:
src/pages/App.js

<Route path="/user/:user" component={ User } />

注意:你還得先在頭部加上import User from './User';

在開始寫User頁面之前芍阎。我們最后一件事是在Detail組件中做User組件的跳轉(zhuǎn)。首先添加這一行到Detail.js文件的開頭缨恒。

src/pages/Detail.js

import { Link } from 'react-router-dom'谴咸;

你現(xiàn)在可以在三個地方添加<Link>組件:renderCommits()轮听,renderForks()和renderPulls()。這是很小的變化岭佳,你可以參考一下我的寫法:

renderCommits() {
    return this.state.commits.map((commit, index) => {
        const author = commit.author ? commit.author.login : 'Anonymous';

        return (<p key={index}>
            <Link to={ `/user/${author}` }>{author}</Link>:
            <a href={commit.html_url}>{commit.commit.message}</a>.
        </p>);
    });
}

renderForks() {
    return this.state.forks.map((fork, index) => {
        const owner = fork.owner ? fork.owner.login : 'Anonymous';

        return (<p key={index}>
            <Link to={ `/user/${owner}` }>{owner}</Link>: forked to
            <a href={fork.html_url}>{fork.html_url}</a> at {fork.created_at}.
        </p>);
    });
}

renderPulls() {
    return this.state.pulls.map((pull, index) => {
        const user = pull.user ? pull.user.login : 'Anonymous';

        return (<p key={index}>
            <Link to={ `/user/${user}` }>{user}</Link>:
            <a href={pull.html_url}>{pull.body}</a>.
        </p>);
    });
}

我們現(xiàn)在有一條路由到我們的新頁面血巍,Detail頁面有幾個鏈接跳轉(zhuǎn)到User組件,外加一個寫了大概的User.js珊随。然后試試接口述寡,看看能不能得到用戶數(shù)據(jù),給你提供一些靈感叶洞。

https://api.github.com/users/rexxara/events

如果你想了解的更深入鲫凶,你可以給User組件更多的render方法,就像我們在Detail組件里做的一樣衩辟,這樣你就能輸出更多信息螟炫。但是作為示例,我會盡量保持簡單艺晴。你可以自己多寫點(diǎn)render進(jìn)去昼钻。我將在頁面中呈現(xiàn)事件類型(比如PushEvent),倉庫名稱和創(chuàng)建日期封寞。

我從Detail.js中復(fù)制的代碼基本上做了全部的工作然评,實(shí)際上剩下的就只有寫render()方法,這樣User組件就完成了狈究。我決定把這個頁面做成一個列表碗淌,你可以多搞點(diǎn)花樣進(jìn)去,下面是我的User組件render()方法:

src/pages/User.js

render() {
    return <ul>
        {this.state.events.map((event, index) => {
            const eventType = event.type;
            const repoName = event.repo.name;
            const creationDate = event.created_at;

            return (<li key={index}>
                <strong>{repoName}</strong>: {eventType}
                at {creationDate}.
            </li>);
        })}
    </ul>;
}

與之前的寫forks頁面差不多抖锥,其實(shí)應(yīng)該將{creationDate}和{eventType}放在一條線上亿眠,以避免丟失空格。
就這樣了宁改,你現(xiàn)在訪問http://localhost:8080 ,選擇一個repository魂莫,點(diǎn)一下你想看的commit forks 或者 pulls 还蹲,然后點(diǎn)擊用戶名來看看他們的歷史紀(jì)錄。完美耙考。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谜喊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子倦始,更是在濱河造成了極大的恐慌斗遏,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞋邑,死亡現(xiàn)場離奇詭異诵次,居然都是意外死亡账蓉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門逾一,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铸本,“玉大人,你說我怎么就攤上這事遵堵∠溏瑁” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵陌宿,是天一觀的道長锡足。 經(jīng)常有香客問我,道長壳坪,這世上最難降的妖魔是什么舶得? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮弥虐,結(jié)果婚禮上扩灯,老公的妹妹穿的比我還像新娘。我一直安慰自己霜瘪,他們只是感情好珠插,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颖对,像睡著了一般捻撑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缤底,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天顾患,我揣著相機(jī)與錄音,去河邊找鬼个唧。 笑死江解,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的徙歼。 我是一名探鬼主播犁河,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼魄梯!你這毒婦竟也來了桨螺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤酿秸,失蹤者是張志新(化名)和其女友劉穎灭翔,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辣苏,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肝箱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年哄褒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狭园。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡读处,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唱矛,到底是詐尸還是另有隱情罚舱,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布绎谦,位于F島的核電站管闷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏窃肠。R本人自食惡果不足惜包个,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冤留。 院中可真熱鬧碧囊,春花似錦、人聲如沸纤怒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泊窘。三九已至熄驼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烘豹,已是汗流浹背瓜贾。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留携悯,地道東北人祭芦。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像憔鬼,于是被迫代替她去往敵國和親龟劲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容