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

詳解react-refetch的使用小例子

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

使用react-refetch來簡化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ù)的邏輯用高階組件抽離出來,下面我們再用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方法接收一個函數(shù)作為參數(shù),這個函數(shù)返回一個對象,如果結(jié)果對象的值是一個字符串,那么獲取prop后,會對這個字符串發(fā)起請求,但是如果值是一個函數(shù),那么不會立即執(zhí)行,而是會傳遞給組件,以便后續(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ù)會被傳遞給Gist的prop,然后就可以在Gist里面使用了

connectWithStar(Gist)

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

相關(guān)文章

最新評論

通渭县| 龙井市| 江安县| 武城县| 关岭| 沙坪坝区| 井冈山市| 宁强县| 年辖:市辖区| 仁寿县| 荆州市| 申扎县| 溆浦县| 明光市| 林芝县| 布拖县| 金坛市| 东方市| 图片| 合川市| 桃江县| 乌兰察布市| 临澧县| 巩留县| 家居| 云和县| 远安县| 海安县| 南投市| 六安市| 汽车| 武邑县| 寿阳县| 新绛县| 拉孜县| 乐都县| 甘洛县| 天台县| 呼伦贝尔市| 揭西县| 阿巴嘎旗|