亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react中的refetch如何用

發布時間:2022-04-19 16:58:43 來源:億速云 閱讀:180 作者:iii 欄目:移動開發

這篇“react中的refetch如何用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“react中的refetch如何用”文章吧。

使用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>
)

加工Gist組件,star函數會被傳遞給Gist的prop,然后就可以在Gist里面使用了

connectWithStar(Gist)

以上就是關于“react中的refetch如何用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新乐市| 格尔木市| 临猗县| 南雄市| 泸水县| 大同市| 麦盖提县| 疏勒县| 平乐县| 新蔡县| 温州市| 扶余县| 承德县| 南投县| 清涧县| 弋阳县| 昌吉市| 松江区| 县级市| 东港市| 上杭县| 云阳县| 白河县| 鄂尔多斯市| 富民县| 长武县| 天柱县| 神木县| 合江县| 定陶县| 莱西市| 金湖县| 门源| 宜兴市| 乡宁县| 丽水市| 昌吉市| 韶山市| 高平市| 西林县| 兰西县|