最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解react-refetch的使用小例子

 更新時(shí)間:2019年02月15日 10:33:03   作者:碼碼碼畜  
這篇文章主要介紹了詳解react-refetch的使用小例子,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

使用react-refetch來(lái)簡(jiǎn)化api獲取數(shù)據(jù)的代碼

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獲取數(shù)據(jù)的邏輯用高階組件抽離出來(lái),下面我們?cè)儆胷eact-refetch來(lái)簡(jiǎn)化上面的異步代碼

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邏輯也添加了

分離列表和項(xiàng)目的職責(zé)

很明顯,List組件是一個(gè)渲染列表的組件,他的職責(zé)就是渲染列表,但是我們?cè)谶@里也處理了單個(gè)Item的邏輯,我們可以將其進(jìn)行職責(zé)分離,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來(lái)給Gist添加功能

react-refetch的connect方法接收一個(gè)函數(shù)作為參數(shù),這個(gè)函數(shù)返回一個(gè)對(duì)象,如果結(jié)果對(duì)象的值是一個(gè)字符串,那么獲取prop后,會(huì)對(duì)這個(gè)字符串發(fā)起請(qǐng)求,但是如果值是一個(gè)函數(shù),那么不會(huì)立即執(zhí)行,而是會(huì)傳遞給組件,以便后續(xù)使用

值為字符串

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

值為函數(shù)

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函數(shù)會(huì)被傳遞給Gist的prop,然后就可以在Gist里面使用了

connectWithStar(Gist)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

河池市| 葫芦岛市| 治县。| 平乡县| 邵阳市| 贵德县| 阜平县| 西平县| 平阴县| 清远市| 明水县| 象州县| 奉节县| 郁南县| 闽侯县| 邳州市| 永宁县| 许昌县| 新河县| 永平县| 平阴县| 区。| 石台县| 长沙县| 阿鲁科尔沁旗| 哈尔滨市| 治多县| 荆州市| 自治县| 桂林市| 仲巴县| 鹤峰县| 宾阳县| 云龙县| 家居| 淮北市| 沾益县| 绥德县| 长岭县| 禹城市| 韶山市|