日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

從 React 新官網學到的一個優(yōu)秀實踐妙招

來源: 責編: 時間:2024-04-15 18:11:54 263觀看
導讀在開發(fā)過程中,我們常常會遇到這樣的場景。有一個列表,但是我們需要根據列表的不同類型查詢并顯示對應類型的數據。如頭圖所示。這里有一個很明確的現象就是,不同的類型會對應不同的列表,但是當我們代入抽象思維思考一下就

l0Y28資訊網——每日最新資訊28at.com

在開發(fā)過程中,我們常常會遇到這樣的場景。l0Y28資訊網——每日最新資訊28at.com

有一個列表,但是我們需要根據列表的不同類型查詢并顯示對應類型的數據。如頭圖所示。這里有一個很明確的現象就是,不同的類型會對應不同的列表,但是當我們代入抽象思維思考一下就能輕易發(fā)現,除了類型不同之外,其他的所有特性都是一樣的。l0Y28資訊網——每日最新資訊28at.com

一樣的接口、一樣的 UI、一樣的類型、一樣的交互。因此我們很容易會想到,把多個類型的列表當成同一個列表來處理,當 type 發(fā)生變化時去重新請求接口就可以輕松完成這個功能。l0Y28資訊網——每日最新資訊28at.com

function ListPage() {  const [list, setList] = useState([])  const [loading, setLoading] = useState(true)  const [error, setError] = useState('')  const [type, setType] = useState('all')  useEffect(() => {    setLoading(true)    api.get('xxx/xxx/xxx', type).then(res => {      setList(res.data)      setLoading(false)      setError('')    })  }, [type])  return (    <>      <Tabs type={type} onChange={setType} />      <List        list={list}        loading={loading}        error={error}        renderItem={(item) => (          <div key={item} className={s.item}>{item}</div>        )}      />    </>  )}

這樣的處理是有一定合理性的,我相信很多小伙伴也會這樣處理。因為他非常符合語義。l0Y28資訊網——每日最新資訊28at.com

不過 React 新官方文檔中,提出了一個更巧妙的方式來解決這個問題。l0Y28資訊網——每日最新資訊28at.com

首先,我們可以將列表邏輯單獨拆分為一個子組件。該子組件接收參數 type 作為一個 propsl0Y28資訊網——每日最新資訊28at.com

function ListPart({type}) {  const [list, setList] = useState([])  const [loading, setLoading] = useState(true)  const [error, setError] = useState('')  useEffect(() => {    api.get('xxx/xxx/xxx', type).then(res => {      setList(res.data)      setLoading(false)      setError('')    })  }, [])    return (    <List      list={list}      loading={loading}      error={error}      renderItem={(item) => (        <div key={item} className={s.item}>{item}</div>      )}    />  )}

然后這里的重點來了,在 ListPage 組件中,我們在剛才封裝好的子組件 ListPart 上,傳入一個 key 值。這樣,我們就能夠在不顯示監(jiān)聽 type 變化的情況下,做到跟剛才一樣的效果。l0Y28資訊網——每日最新資訊28at.com

function ListPage() {  const [type, setType] = useState('all')  return (    <div>      <Tabs type={type} onChange={setType} />      <ListPart type={type} key={type} />    </div>  )}

在 React 的 diff 過程中,當一個組件的 key 值發(fā)生了變化,那么該組件將會被重新創(chuàng)建。我們也正是巧妙的利用了這個內部邏輯,將代碼改進成現在這樣。l0Y28資訊網——每日最新資訊28at.com

在 ListPart 的封裝中,我們還可以借助我們之前封裝自定義 hook 的思路,進一步簡化代碼。l0Y28資訊網——每日最新資訊28at.com

function ListPart({type}) {  const { loading, list = [], error } = useFetch(api, type)    return (    <List      list={list}      loading={loading}      error={error}      renderItem={(item) => (        <div key={item} className={s.item}>{item}</div>      )}    />  )}

這里面由于自定義 hook useFetch 是提前封裝好的工具方法,List 是提前封裝好的列表組件,當我們在寫頁面頁面時,整個列表的開發(fā)工作量將會非常小。l0Y28資訊網——每日最新資訊28at.com

完整代碼如下:l0Y28資訊網——每日最新資訊28at.com

function ListPage() {  const [type, setType] = useState('all')  return (    <div>      <Tabs type={type} onChange={setType} />      <ListPart type={type} key={type} />    </div>  )}
function ListPart({type}) {  const { loading, list = [], error } = useFetch(api, type)    return (    <List      list={list}      loading={loading}      error={error}      renderItem={(item) => (        <div key={item} className={s.item}>{item}</div>      )}    />  )}

其他案例

給子組件傳入 key 值,當 key 值發(fā)生變化,子組件會被重置。這樣的思路還可以運用到別的類似場景。l0Y28資訊網——每日最新資訊28at.com

例如,你請求了一個書籍列表,但是某一個區(qū)域只能顯示選中的書籍的部分信息與幾條用戶評價,當我們選中別的書籍時,這信息與評論都需要全部更新。l0Y28資訊網——每日最新資訊28at.com

這里處理起來比較麻煩的是書籍部分信息是從父級傳遞而來,而評論信息卻是需要重新請求獲取。l0Y28資訊網——每日最新資訊28at.com

不過借助這個思路,將會非常容易做到良好的解耦,我們只需要從父級通過 props 把書籍信息傳遞下來,然后在子組件內部自己去處理評論信息即可。從而斷開評論信息與書籍切換的耦合。l0Y28資訊網——每日最新資訊28at.com

function BookProfile() {  ...  return (    <div>      ...      <CurrentBookPart info={infolist[i]} key={bookid} />    </div>  )}
function CurrentBookPart(props) {  const [comment, setComment] = useState()  ...}

總結

合理運用這個技巧,可以讓我們的代碼更加高效、低耦合,邏輯更加順暢。也能夠大幅度提高我們的開發(fā)效率,快快去重新查看一下你的項目,有沒有可以使用這種方式重構的地方吧。l0Y28資訊網——每日最新資訊28at.com

React 新的官方文檔確實寫得非常好,提供了許多項目開發(fā)最佳實踐的思路。這些思路和實用技巧,同樣也適用于 Vue,也能夠提高我們對 Vue 的使用心得。l0Y28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-83618-0.html從 React 新官網學到的一個優(yōu)秀實踐妙招

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C++中的顯式虛函數重載:override與final詳解

下一篇: 要么返回錯誤值,要么輸出日志,別兩樣都做

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久九九99| 在线看日韩欧美| 欧美久久久久免费| 欧美日韩在线电影| 国产精品人人做人人爽| 国产日韩欧美在线播放不卡| 尤物yw午夜国产精品视频明星| 极品少妇一区二区三区| 亚洲国产激情| 亚洲天堂av在线免费观看| 欧美一区二区三区在线观看| 麻豆精品视频在线| 欧美精品亚洲一区二区在线播放| 欧美体内she精视频| 国产一区二区看久久| 亚洲国产另类久久精品| 亚洲视频电影在线| 久久综合99re88久久爱| 欧美午夜电影网| 国产日韩一区二区| 亚洲毛片在线| 久久久久国产一区二区三区四区 | 国产精品国产三级国产普通话99| 国产日韩欧美综合一区| 亚洲人成7777| 欧美专区18| 欧美四级在线观看| 亚洲第一页自拍| 午夜电影亚洲| 欧美全黄视频| 精品1区2区3区4区| 亚洲深爱激情| 欧美成人高清| 国产一区二区中文| 在线综合视频| 欧美顶级少妇做爰| 国产一区二区三区久久| 中文一区字幕| 蜜臀91精品一区二区三区| 国产精品日本精品| 亚洲伦理在线| 玖玖精品视频| 国产主播一区二区三区四区| 一本不卡影院| 欧美韩日精品| 伊人精品成人久久综合软件| 午夜久久福利| 欧美性事在线| 日韩午夜在线电影| 麻豆9191精品国产| 国产手机视频一区二区| 亚洲天堂成人在线观看| 欧美高清影院| 亚洲大片av| 欧美在线你懂的| 国产精品海角社区在线观看| 亚洲美女视频| 欧美sm视频| 在线观看日韩一区| 久久久久国色av免费看影院 | 欧美三区在线| 91久久精品国产| 狂野欧美激情性xxxx| 国产一区二区三区在线观看免费视频| 亚洲婷婷综合色高清在线| 欧美日韩三级| 亚洲精选在线| 欧美精品99| 亚洲人线精品午夜| 欧美电影在线播放| 亚洲国产三级网| 美女免费视频一区| 亚洲成色777777女色窝| 久久色在线播放| 国产一区二区三区久久久久久久久| 销魂美女一区二区三区视频在线| 国产精品福利网| 亚洲图片你懂的| 国产精品久久二区| 亚洲天堂久久| 国产精品久久久久久久久搜平片| 中文欧美字幕免费| 国产精品高潮呻吟| 亚洲一区中文字幕在线观看| 欧美性大战xxxxx久久久| 亚洲一线二线三线久久久| 国产精品久久久久免费a∨| 亚洲在线不卡| 国产美女一区| 久久成人免费视频| 一区二区三区在线观看视频| 久久久久久一区二区| 在线成人国产| 欧美成人精品一区二区| 亚洲精品字幕| 欧美日韩视频| 亚洲欧美大片| 国产一区二区三区久久精品| 久久午夜羞羞影院免费观看| 亚洲第一区中文99精品| 欧美激情视频在线播放| 在线亚洲美日韩| 国产精品亚洲人在线观看| 欧美中文日韩| 亚洲电影免费观看高清完整版在线观看 | 亚洲第一久久影院| 欧美激情亚洲精品| 宅男噜噜噜66一区二区| 国产精品一区免费观看| 久久久91精品国产| 亚洲国产精品尤物yw在线观看| 欧美精品一区二区三区很污很色的 | 国产精品av久久久久久麻豆网| 亚洲免费视频成人| 国产一区视频在线看| 玖玖国产精品视频| 99在线热播精品免费| 国产精品亚洲美女av网站| 久久久999精品视频| 最新高清无码专区| 国产精品扒开腿做爽爽爽软件| 午夜视频在线观看一区| 精品二区久久| 欧美剧在线免费观看网站| 亚洲女同同性videoxma| 国内精品国产成人| 欧美精品一区在线播放| 午夜精品亚洲一区二区三区嫩草| 黄色一区二区在线| 欧美日韩精品一区视频| 欧美一区二区成人6969| 亚洲国产精品久久久久婷婷884| 欧美日韩另类视频| 久久疯狂做爰流白浆xx| 亚洲麻豆视频| 国产一区二区视频在线观看| 欧美激情亚洲自拍| 性娇小13――14欧美| 亚洲国产小视频在线观看| 国产精品久久久久久久久果冻传媒 | 日韩一级免费观看| 国产日韩欧美视频在线| 欧美激情综合在线| 欧美亚洲在线| 91久久国产综合久久91精品网站| 国产精品欧美日韩一区| 欧美xxx在线观看| 亚洲欧美在线免费观看| 亚洲欧洲精品一区二区三区不卡 | 一区二区三区 在线观看视频| 好看的av在线不卡观看| 国产精品v日韩精品v欧美精品网站 | 久久婷婷国产综合国色天香| 亚洲一区二区不卡免费| 亚洲国产天堂网精品网站| 国产女主播在线一区二区| 欧美激情偷拍| 久久人人爽人人爽| 新67194成人永久网站| 一本久久综合亚洲鲁鲁五月天| 黄色成人片子| 国产欧美日韩视频在线观看 | 国产午夜精品理论片a级探花 | 免费亚洲一区| 午夜亚洲性色福利视频| 99精品视频免费观看| **性色生活片久久毛片| 国产欧美在线观看一区| 欧美午夜a级限制福利片| 欧美成人影音| 久久久精品久久久久| 亚洲欧美另类在线| 夜久久久久久| 最新国产拍偷乱拍精品| 一区二区在线视频| 国产欧美一区二区三区另类精品 | 亚洲精品免费网站| 一色屋精品视频在线看| 国产婷婷精品| 国产九九精品视频| 国产精品女人久久久久久| 欧美午夜精品一区| 欧美日韩精品免费观看| 欧美电影在线观看| 久久综合久久综合久久| 久久九九精品| 久久成人资源| 欧美影院成人| 欧美一区观看| 欧美一区激情| 欧美亚洲在线视频| 午夜影院日韩| 午夜精品免费| 先锋影音国产一区| 篠田优中文在线播放第一区| 亚洲欧美变态国产另类| 亚洲一区二区精品视频| 亚洲调教视频在线观看| 中日韩美女免费视频网址在线观看 | 亚洲一区免费在线观看| 亚洲午夜激情网页| 亚洲一区久久久| 亚洲欧美日韩一区二区在线| 亚洲欧美日韩国产一区二区三区|