React-利用axios請(qǐng)求數(shù)據(jù)并渲染數(shù)據(jù)

timg.jpg

本文關(guān)鍵詞:react axios mockapi.io 等等

上篇文章快速安裝create-react-app腳手架我們已經(jīng)安裝好了一個(gè)react項(xiàng)目的腳手架了荤胁,現(xiàn)在要用它來做點(diǎn)事情。就最簡(jiǎn)單的先請(qǐng)求接口數(shù)據(jù)圆恤,再把數(shù)據(jù)渲染出來。這就是殺雞用牛刀了,當(dāng)然我們也可以直接引入React.js也可以了~
先看下具體結(jié)構(gòu)的圖片

react-img-1.png

上圖我打算分為兩個(gè)部分來寫,第一個(gè)部分就是紅色的表格頭懊悯,固定的內(nèi)容,一個(gè)是綠色的數(shù)據(jù)表格行梦皮,把他抽成一個(gè)組件的形式來渲染數(shù)據(jù)炭分,而這些數(shù)據(jù)呢,我打算用https://www.mockapi.io來模擬真實(shí)數(shù)據(jù)了届氢,如果沒用過mockapi的話也可以上網(wǎng)查一下啦欠窒。
大家也可以用我的數(shù)據(jù)接口是https://5b5e71c98e9f160014b88cc9.mockapi.io/api/v1/lists

[
  {
    "id": "1",
    "name": "小紅",
    "age": 20,
    "sex": "女"
  },
  {
    "id": "2",
    "name": "小明",
    "age": 21,
    "sex": "男"
  },
  {
    "id": "3",
    "name": "翠花",
    "age": 24,
    "sex": "女"
  },
  {
    "id": "4",
    "name": "秋香",
    "age": 25,
    "sex": "女"
  },
  {
    "id": "5",
    "name": "張三",
    "age": 30,
    "sex": "男"
  }
]

現(xiàn)在我們開始寫代碼

比較懶得寫樣式啦,我就直接安裝個(gè)boostrap,然后引入boostrap的樣式好了

一岖妄、安裝boostrap型将、axios

npm install bootstrap@3.3.7 --save

請(qǐng)求數(shù)據(jù)就用axios吧,也可以用JQuery的ajax(),我這里用axios

npm isntall axios --save

如果安裝完成荐虐,可以看到


bs.png

二七兜、在src目錄下新建一個(gè)List.js,在List.js中:

在create-react-app可以盡情使用es6、es7的語法了福扬,我們會(huì)對(duì)項(xiàng)目打包腕铸。

import React from 'react';
import 'bootstrap/dist/css/bootstrap.css';
import axios from 'axios';

首先先把組件寫好,在List.js中铛碑,我先第一個(gè)表格數(shù)據(jù)的組件TrData

//List.js
class TrData extends React.Component{
  constructor(props){
    super(props);
  }
  render(){
    return (
      this.props.users.map((user,i)=>{
          return (
              <tr key={user.id} className="text-center">
                <td>{user.id}</td>
                <td>{user.title}</td>
                <td>{user.name}</td>
                <td>{user.sex}</td>
              </tr>
          )       
      })
    )
  }
}

首先用React.Component創(chuàng)建一個(gè)TrData組件狠裹,然后渲染傳進(jìn)來的數(shù)據(jù)users,循環(huán)遍歷出來.遍歷users的方法是es6的map()方法汽烦,大家也可用其他方法遍歷了涛菠,只要數(shù)據(jù)能出來。通過props給這個(gè)組件導(dǎo)入數(shù)據(jù)撇吞。接下來俗冻,我再創(chuàng)建一個(gè)List的組件,來顯示UI視圖

//List.js
class List extends React.Component {
    constructor(props){
        super(props);
  }
  render() {
      return (
        <table className="table table-bordered">
          <thead>
            <tr>
              <th className="text-center">ID</th>
              <th className="text-center">姓名</th>
              <th className="text-center">年齡</th>
              <th className="text-center">性別</th>
            </tr>
          </thead>
        <tbody>
           <TrData users={this.state.users}/>
        </tbody>
        </table>
      )  
  }
}

并且導(dǎo)出這個(gè)組件

//List.js
export default List;

接下來牍颈,我們來請(qǐng)求數(shù)據(jù)迄薄,我們知道在vue中有生命周期,可以選擇在特定的生命周期上進(jìn)行數(shù)據(jù)掛載煮岁。同樣React也有生命周期讥蔽。
當(dāng)組件輸出到 DOM 后會(huì)執(zhí)行 componentDidMount()鉤子,也就是說我們可以在componentDidMount()內(nèi)請(qǐng)求數(shù)據(jù)人乓,并更新數(shù)據(jù)勤篮。還有一點(diǎn)就是我們請(qǐng)求的數(shù)據(jù)要放在那兒,沒錯(cuò)色罚,這就是state≌司ⅲ可能有些讀者不懂這個(gè)state戳护,這里簡(jiǎn)單講一下,state就是可以存儲(chǔ)組件的一系列狀態(tài)瀑焦。只能定義在組件內(nèi)部腌且。接下來,我兩個(gè)state的兩個(gè)狀態(tài)榛瓮,一個(gè)是users铺董,一個(gè)是是否已經(jīng)加載數(shù)據(jù)完成的isLoaded。在組件List內(nèi)部加入

constructor(props){
    super(props);
    this.state={
      users:[],
      isLoaded:false
    }
  }

state需要在constructor上定義。這涉及ES6的語法特性精续,這里就不過多講其他的了坝锰。我們?cè)僭贚ist內(nèi)部添加

//當(dāng)組件輸出到 DOM 后會(huì)執(zhí)行 componentDidMount()
componentDidMount(){
    const _this=this;    //先存一下this,以防使用箭頭函數(shù)this會(huì)指向我們不希望它所指向的對(duì)象重付。
    axios.get('https://5b5e71c98e9f160014b88cc9.mockapi.io/api/v1/lists')
    .then(function (response) {
      _this.setState({
        users:response.data,
        isLoaded:true
      });
    })
    .catch(function (error) {
      console.log(error);
      _this.setState({
        isLoaded:false,
        error:error
      })
    })
  }

通過axios請(qǐng)求數(shù)據(jù)顷级,(在我之前的文章有)當(dāng)請(qǐng)求成功后就更新state的users和isLoaded狀態(tài)。更新state需要用this.setState()來更新狀態(tài)确垫,這個(gè)很類似微信小程序的setData()弓颈,state一發(fā)生改變,綁定那些狀態(tài)的試圖也會(huì)相應(yīng)刷新改變删掀。
我再寫得合理一些翔冀,修改一下List 得render()

//List.js
render() {
      if(!this.state.isLoaded){
        return <div>Loading</div>
      }else{
      return (
        <table className="table table-bordered">
          <thead>
            <tr>
              <th className="text-center">ID</th>
              <th className="text-center">姓名</th>
              <th className="text-center">年齡</th>
              <th className="text-center">性別</th>
            </tr>
          </thead>
        <tbody>
           <TrData users={this.state.users}/>
        </tbody>
        </table>
      )  
    }
  }

當(dāng)再請(qǐng)求數(shù)據(jù)得時(shí)候顯示Loading,請(qǐng)求完成直接顯示數(shù)據(jù)。

三披泪、在app.js中引入List.js并渲染

//app.js
import React, { Component } from 'react';
import './App.css';
import List from './List';

class App extends Component {
  constructor(props){
    super(props);
  }
  render() {
    return (
      <div className="container">
        <List />
      </div>
    );
  }
}

export default App;

四纤子、在create-react-app腳手架跑起來項(xiàng)目

npm start
res.png

這樣就實(shí)現(xiàn)了最簡(jiǎn)單的請(qǐng)求數(shù)據(jù)和渲染數(shù)據(jù)了
有需要得讀者可以看下源碼,我把它放到github上去了https://github.com/IamZYP/List

有問題可以留言一起交流~~~
歡迎訪問我的個(gè)人網(wǎng)站zhengyepan.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末付呕,一起剝皮案震驚了整個(gè)濱河市计福,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌徽职,老刑警劉巖象颖,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異姆钉,居然都是意外死亡说订,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門潮瓶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陶冷,“玉大人,你說我怎么就攤上這事毯辅」÷祝” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵思恐,是天一觀的道長沾谜。 經(jīng)常有香客問我,道長胀莹,這世上最難降的妖魔是什么基跑? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮描焰,結(jié)果婚禮上媳否,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好篱竭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布力图。 她就那樣靜靜地躺著,像睡著了一般室抽。 火紅的嫁衣襯著肌膚如雪搪哪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天坪圾,我揣著相機(jī)與錄音晓折,去河邊找鬼。 笑死兽泄,一個(gè)胖子當(dāng)著我的面吹牛漓概,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播病梢,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼胃珍,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蜓陌?” 一聲冷哼從身側(cè)響起觅彰,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钮热,沒想到半個(gè)月后填抬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡隧期,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年飒责,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仆潮。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宏蛉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出性置,到底是詐尸還是另有隱情拾并,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布鹏浅,位于F島的核電站辟灰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏篡石。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一西采、第九天 我趴在偏房一處隱蔽的房頂上張望凰萨。 院中可真熱鬧,春花似錦、人聲如沸胖眷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽珊搀。三九已至冶忱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間境析,已是汗流浹背囚枪。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留劳淆,地道東北人链沼。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像沛鸵,于是被迫代替她去往敵國和親括勺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

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