国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解react-refetch的使用小例子

2024-05-06 15:42:25
字體:
來源:轉載
供稿:網友

使用react-refetch來簡化api獲取數據的代碼

const List = ({data: gists}) => { return (  <ul>   {gists.map(gist => (    <li key={gist.id}>{gist.description}</li>   ))}  </ul> )}const withData = url => Part => { return class extends Component {  state = {data: []}  componentDidMount() {   fetch(url)    .then(response => response.json ? response.json() : response)    .then(data => this.setState({data}))  }  render() {   return <Part {...this.state} {...this.props} />  } }}const ListWithGists = withData('https://api.github.com/users/gaearon/gists')(List)

上面的代碼,我們將api獲取數據的邏輯用高階組件抽離出來,下面我們再用react-refetch來簡化上面的異步代碼

import { connect as refetchConnect } from 'react-refetch'const List = ({gists}) => { if (gists.pending) {  return <div>loading...</div> } else if (gists.rejected) {  return <div>{gists.reason}</div> } else if (gists.fulfilled) {  return (   gists.fulfilled && <ul>    {gists.value.map(gist => (     <li key={gist.id}>{gist.description}</li>    ))}   </ul>  ) }}const ListWithGists = refetchConnect(() => ({gists: `https://api.github.com/users/gaearon/gists`}))(List)

瞬間清爽多了,順便利用react-refetch提供的屬性,順便把loading邏輯也添加了

分離列表和項目的職責

很明顯,List組件是一個渲染列表的組件,他的職責就是渲染列表,但是我們在這里也處理了單個Item的邏輯,我們可以將其進行職責分離,List只做列表染,而Gist也只渲染自身

const Gist = ({description}) => ( <li>  {description} </li>)const List = ({gists}) => { if (gists.pending) {  return <div>loading...</div> } else if (gists.rejected) {  return <div>{gists.reason}</div> } else if (gists.fulfilled) {  return (   gists.fulfilled && <ul>    {gists.value.map(gist => <Gist key={gist.id} {...gist} />)}   </ul>  ) }}

使用react-refetch來給Gist添加功能

react-refetch的connect方法接收一個函數作為參數,這個函數返回一個對象,如果結果對象的值是一個字符串,那么獲取prop后,會對這個字符串發起請求,但是如果值是一個函數,那么不會立即執行,而是會傳遞給組件,以便后續使用

值為字符串

const connectWithStar = refetchConnect(() => ({gists: `https://api.github.com/users/gaearon/gists`}))

值為函數

const connectWithStar = refetchConnect(({id}) => ({ star: () => ({  starResponse: {   url: `https://api.github.com/gists/${id}/star?${token}`,   method: 'PUT'  } })}))const Gist = ({description, star}) => ( <li>  {description}  <button onClick={star}>+1</button> </li>)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 贵定县| 汤阴县| 鄄城县| 武强县| 防城港市| 旬邑县| 杂多县| 肇源县| 台湾省| 禄丰县| 昌黎县| 类乌齐县| 扎赉特旗| 辉县市| 彭阳县| 田林县| 嘉定区| 红原县| 探索| 乐平市| 金川县| 蓬安县| 札达县| 平乡县| 长治县| 武平县| 大埔县| 会东县| 罗山县| 蚌埠市| 东至县| 启东市| 博湖县| 镇远县| 神池县| 武宣县| 招远市| 漠河县| 湾仔区| 左云县| 楚雄市|