<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
開始這個範例之前需要對es6、react、axios有一定的瞭解
安裝一個react專案的腳手架 create react-app
在開始之前,你可能需要安裝 yarn。
$ yarn create react-app antd-demo
工具會自動初始化一個腳手架並安裝 React 專案的各種必要依賴,如果在過程中出現網路問題,請嘗試設定代理或使用其他 npm registry。
然後我們進入專案並啟動。
$ cd antd-demo $ yarn start
此時瀏覽器會存取 http://localhost:3000/ ,看到 Welcome to React 的介面就算成功了。
想了解create react-app腳手架結合antd使用的可以存取這個地址:
https://ant.design/docs/react/use-with-create-react-app-cn
在前端開發的時候,需要獲取後臺的資料,並把資料渲染到元件展示給使用者看,那麼這個過程如何實現呢
一般的思路是請求後端提供的介面資料,再把資料渲染出來。
下面一個範例展示:
我打算分為兩個部分來寫,第一個部分就是紅色的表格頭,固定的內容,一個是綠色的資料表格行,把他抽成一個元件的形式來渲染資料,而這些資料呢,我打算用https://www.mockapi.io來模擬真實資料了,也就是說模擬後端提供的介面資料,如果沒用過mockapi的話也可以上網查一下。
大家也可以用這個資料介面:https://5b5e71c98e9f160014b88cc9.mockapi.io/api/v1/lists
介面的資料大概這樣子,json的資料格式
[ { "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": "男" } ]
開始寫程式碼:
為了方便不用寫css,直接安裝個boostrap,然後引入boostrap的樣式好了
npm install bootstrap@3.3.7 --save
請求資料就用axios吧,也可以用JQuery的ajax(),我這裡用axios
npm isntall axios --save
如果安裝完成,可以看到
在create-react-app可以盡情使用es6、es7的語法了,我們會對專案打包。
import React from 'react'; import 'bootstrap/dist/css/bootstrap.css'; import axios from 'axios';
首先先把元件寫好,在List.js中,我先第一個表格資料的元件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建立一個TrData元件,然後渲染傳進來的資料users,迴圈遍歷出來.遍歷users的方法是es6的map()方法,大家也可用其他方法遍歷了,只要資料能出來。
通過props給這個元件匯入資料。接下來,我再建立一個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> ) } }
並且匯出這個元件
//List.js export default List;
接下來,我們來請求資料,我們知道在vue中有生命週期,可以選擇在特定的生命週期上進行資料掛載。同樣React也有生命週期。
當元件輸出到 DOM 後會執行 componentDidMount()勾點,也就是說我們可以在componentDidMount()內請求資料,並更新資料。
還有一點就是我們請求的資料要放在那兒,沒錯,這就是state。可能有些讀者不懂這個state,這裡簡單講一下,state就是可以儲存元件的一系列狀態。只能定義在元件內部。接下來,我兩個state的兩個狀態,一個是users,一個是是否已經載入資料完成的isLoaded。
在元件List內部加入
constructor(props){ super(props); this.state={ users:[], isLoaded:false } }
state需要在constructor上定義。這涉及ES6的語法特性,這裡就不過多講其他的了。
我們再在List內部新增
//當元件輸出到 DOM 後會執行 componentDidMount() componentDidMount(){ const _this=this; //先存一下this,以防使用箭頭函數this會指向我們不希望它所指向的物件。 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請求資料,(在我之前的文章有)當請求成功後就更新state的users和isLoaded狀態。更新state需要用this.setState()來更新狀態,這個很類似微信小程式的setData(),state一發生改變,繫結那些狀態的試圖也會相應重新整理改變。
我再寫得合理一些,修改一下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> ) } }
當再請求資料得時候顯示Loading,請求完成直接顯示資料。
//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;
npm start
存取http://localhost:3000/即可看到如下介面:
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45