成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

React-全家桶仿簡(jiǎn)書(shū)部分功能

Jinkey / 1262人閱讀

摘要:全家桶仿簡(jiǎn)書(shū)部分功能前言前段時(shí)間接觸了下,一直想要自己寫一個(gè)小練手。在眾多應(yīng)用中,考慮之后選擇了簡(jiǎn)書(shū)來(lái)模仿,這段時(shí)間就利用了工作之余的時(shí)間進(jìn)行開(kāi)發(fā)。在這里簡(jiǎn)單敘述一下我仿簡(jiǎn)書(shū)部分布局以及功能實(shí)現(xiàn)的過(guò)程,僅做學(xué)習(xí)用途。

React-全家桶仿簡(jiǎn)書(shū)部分功能 前言
前段時(shí)間接觸了下React,一直想要自己寫一個(gè)小Demo練手。在眾多應(yīng)用中,考慮之后選擇了簡(jiǎn)書(shū)來(lái)模仿,這段時(shí)間就利用了工作之余的時(shí)間進(jìn)行開(kāi)發(fā)。主要用到了React+React-Router4+Redux+Redux-thunk+Immutable。然而寫文章也是可以復(fù)盤一下自己的開(kāi)發(fā)過(guò)程,對(duì)自己還是受益良多的。在這里簡(jiǎn)單敘述一下我仿簡(jiǎn)書(shū)部分布局以及功能實(shí)現(xiàn)的過(guò)程,僅做學(xué)習(xí)用途。
技術(shù)棧以及組件庫(kù)

Redux:解決組件數(shù)據(jù)共享問(wèn)題

Redux-thunk:Redux中間件,允許action可以返回函數(shù)

Immutable:保證數(shù)據(jù)的不可變

Loadable:異步加載組件

Transition-group:動(dòng)畫實(shí)現(xiàn)

styled-components:組件化樣式

axios: 這個(gè)大家都知道吧-_-

數(shù)據(jù)結(jié)構(gòu):

文件結(jié)構(gòu)
┣━ build   // 打包文件
┣━ public   // 打包文件
  ┣━ api   //假數(shù)據(jù)統(tǒng)一存儲(chǔ)
    ┣━ detail.json   //文章頁(yè)數(shù)據(jù)
    ┣━ headerList.json   //頭部熱門搜索數(shù)據(jù)
    ┣━ home.json   //首頁(yè)統(tǒng)一數(shù)據(jù)
    ┣━ homeList.json   //首頁(yè)加載更多文章數(shù)據(jù)
    ┣━ login.json   //登錄數(shù)據(jù)
┣━ src //開(kāi)發(fā)目錄
  ┣━ common   //公用組件
    ┣━ header   //頭部組件
      ┣━ store   //Redux文件
        ┣━ actionCreators.js   //action創(chuàng)建
        ┣━ constants.js   //action.type常量文件
        ┣━ index.js   //入口文件
        ┣━ reducer.js   //reducer處理
      ┣━ store   //UI組件
      ┣━ store   //頭部樣式
  ┣━ pages   //頁(yè)面
    ┣━ detail   //文章頁(yè)
      ┣━ ...
    ┣━ detail   //首頁(yè)
      ┣━ ...
    ┣━ detail   //登錄頁(yè)
      ┣━ ...
    ┣━ detail   //寫文章
      ┣━ ...
  ┣━ statics   //靜態(tài)文件
    ┣━ ...
  ┣━ store   //Redux數(shù)據(jù)
    ┣━ ...
  ┣━ App.js   //入口及路由
  ┣━ index.js   //js文件入口
  ┣━ style.js   //全局樣式
┣━ .gitignore   //git忽略上傳文件
┣━ package.json   //模塊的描述文件
┣━ README.md   //說(shuō)明文件
┣━ yarn.lock   //模塊的描述文件
效果預(yù)覽

實(shí)現(xiàn)主要幾個(gè)功能

登錄退出及未登錄攔截

用戶在已登錄狀態(tài)和未登錄狀態(tài)的界面是不同的,有些功能指定要在登錄狀態(tài)下才會(huì)有,因此會(huì)產(chǎn)生狀態(tài)的切換,在一般小項(xiàng)目中我們可以使用localStorage來(lái)存儲(chǔ)狀態(tài),也可以用Redux,這里我所有的數(shù)據(jù)都是使用Redux進(jìn)行數(shù)據(jù)管理,在進(jìn)入寫文章頁(yè)面調(diào)用了login組件下Redux-login狀態(tài)進(jìn)行判斷,登錄攔截。

class Write extends PureComponent {
  render() {
    const { loginStatus } = this.props;
    console.log(loginStatus)
    if(loginStatus) {
      return (
        
寫文章
) }else{ return } } componentDidMount() { } } const mapState = (state) => ({ loginStatus: state.getIn(["login","login"]) });

點(diǎn)擊加載更多文章

這里在Redux中儲(chǔ)存一個(gè)Page:1的數(shù)據(jù),在每次點(diǎn)擊加載更多文章時(shí)page+1,然后對(duì)page進(jìn)行改變。使得每次點(diǎn)擊page+1。

頭部熱門搜索獲取及切換

在Home組件獲取到數(shù)據(jù)后儲(chǔ)存到Redux中,然后取出前十條數(shù)據(jù),儲(chǔ)存到常量中。通過(guò)點(diǎn)擊事件對(duì)數(shù)據(jù)進(jìn)行切換,同時(shí)出發(fā)動(dòng)畫效果。(由于使用了immutable,所以要在循環(huán)的數(shù)據(jù)前將數(shù)據(jù)轉(zhuǎn)換為不同JS數(shù)組)

const { focused, list, page, mouseIn, totalPage, handleMouseEnter, handleMouseLeave, hanleChangePage } = this.props;
    const newList = list.toJS();  //因?yàn)閘ist目前是immutable數(shù)組,所以我們要將他轉(zhuǎn)換為普通JS數(shù)組,toJS是immutable內(nèi)置方法
    const pageList = [];

    if(newList.length){
      for(let i = (page -1) * 10; i < page * 10; i++){
        pageList.push(
          {newList[i]}
        )
      }
    }

    if(focused || mouseIn) {
      return (
        
          
            熱門搜索
             hanleChangePage(page,totalPage,this.spitIcon)}>
               {this.spitIcon = icon}} className="iconfont spin">
              換一批
            
          
          
            {pageList}
          
        
      )
    }else {
      return null;
    }
  }

文章頁(yè)數(shù)據(jù)

文章頁(yè)數(shù)據(jù)的獲取使用的動(dòng)態(tài)路由,通過(guò)路由傳參將當(dāng)前所點(diǎn)擊文章的ID傳遞到文章頁(yè)。

同時(shí)也可以通過(guò)this.props.location.search 獲取url參數(shù)。

這里注意由于使用了異步組件,路由的文件引入路徑要做修改import Detail from "./pages/detail/loadable";,不然獲取不到路由所傳遞的參數(shù)。

class Detail extends PureComponent {
//dangerouslySetInnerHTML是當(dāng)數(shù)據(jù)內(nèi)容是HTML時(shí)使用,不會(huì)被轉(zhuǎn)義為字符串
  render() {
    const { title, content } = this.props;
    return (
      
        
{title}
) } componentDidMount() { let idPage = this.props.location.search; const id = idPage.substring(4) this.props.getDetail(id); //使用動(dòng)態(tài)路由獲取idthis.props.getDetail(this.props.match.params.id); } }
結(jié)語(yǔ)
由于工作比較忙,所以只做了一些基礎(chǔ)的小功能。后面還有很多有待完善,等空余時(shí)間多了出來(lái)回慢慢進(jìn)行完善。由于剛接觸React,所以做的不太好,不足之處還請(qǐng)指教。

如果你初次接觸到React,或者對(duì)Demo感興趣的話可以查看我GitHub源碼

如果對(duì)你有幫助,可以star我的項(xiàng)目給我一點(diǎn)點(diǎn)的鼓勵(lì),也希望有志同道和的可以加入一起討論,我也會(huì)第一時(shí)間幫你解答。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/99364.html

相關(guān)文章

  • Vue2.0全家桶仿騰訊課堂(移動(dòng)端)

    摘要:最近在學(xué)習(xí)覺(jué)得超好用,忍不住自己仿了個(gè)騰訊課堂練練手,不當(dāng)之處還請(qǐng)大家指正持續(xù)更新中。的使用的狀態(tài)存儲(chǔ)是響應(yīng)式的。需要注意類似于,不同在于提交的是,而不是直接變更狀態(tài)。 最近在學(xué)習(xí)vue,覺(jué)得超好用,忍不住自己仿了個(gè)騰訊課堂練練手,不當(dāng)之處還請(qǐng)大家指正(持續(xù)更新中)。 效果預(yù)覽 ?在線預(yù)覽:點(diǎn)我?。。≡诰€預(yù)覽,手機(jī)瀏覽或切換瀏覽器移動(dòng)調(diào)試 ?源碼地址:Github??求你的小星星~...

    zorro 評(píng)論0 收藏0
  • Vue2.0全家桶仿騰訊課堂(移動(dòng)端)

    摘要:最近在學(xué)習(xí)覺(jué)得超好用,忍不住自己仿了個(gè)騰訊課堂練練手,不當(dāng)之處還請(qǐng)大家指正持續(xù)更新中。的使用的狀態(tài)存儲(chǔ)是響應(yīng)式的。需要注意類似于,不同在于提交的是,而不是直接變更狀態(tài)。 最近在學(xué)習(xí)vue,覺(jué)得超好用,忍不住自己仿了個(gè)騰訊課堂練練手,不當(dāng)之處還請(qǐng)大家指正(持續(xù)更新中)。 效果預(yù)覽 ?在線預(yù)覽:點(diǎn)我!??!在線預(yù)覽,手機(jī)瀏覽或切換瀏覽器移動(dòng)調(diào)試 ?源碼地址:Github??求你的小星星~...

    anquan 評(píng)論0 收藏0
  • 前端--通用知識(shí) - 收藏集 - 掘金

    摘要:閉包有多重前端知識(shí)點(diǎn)大百科全書(shū)前端掘金,,技巧使你的更加專業(yè)前端掘金一個(gè)幫你提升技巧的收藏集。 Vue全家桶實(shí)現(xiàn)還原豆瓣電影wap版 - 掘金用vue全家桶仿寫豆瓣電影wap版。 最近在公司項(xiàng)目中嘗試使用vue,但奈何自己初學(xué)水平有限,上了vue沒(méi)有上vuex,開(kāi)發(fā)過(guò)程特別難受。 于是玩一玩本項(xiàng)目,算是對(duì)相關(guān)技術(shù)更加熟悉了。 原計(jì)劃仿寫完所有頁(yè)面,礙于豆瓣的接口API有限,實(shí)現(xiàn)頁(yè)面也有...

    王笑朝 評(píng)論0 收藏0
  • 2017-06-23 前端日?qǐng)?bào)

    摘要:前端日?qǐng)?bào)精選大前端公共知識(shí)梳理這些知識(shí)你都掌握了嗎以及在項(xiàng)目中的實(shí)踐深入貫徹閉包思想,全面理解閉包形成過(guò)程重溫核心概念和基本用法前端學(xué)習(xí)筆記自定義元素教程阮一峰的網(wǎng)絡(luò)日志中文譯回調(diào)是什么鬼掘金譯年,一個(gè)開(kāi)發(fā)者的好習(xí)慣知乎專 2017-06-23 前端日?qǐng)?bào) 精選 大前端公共知識(shí)梳理:這些知識(shí)你都掌握了嗎?Immutable.js 以及在 react+redux 項(xiàng)目中的實(shí)踐深入貫徹閉包思...

    Vixb 評(píng)論0 收藏0
  • vue全家桶仿某魚(yú)部分布局以及功能實(shí)現(xiàn)

    摘要:在這里簡(jiǎn)單敘述一下我仿某魚(yú)部分布局以及功能實(shí)現(xiàn)的過(guò)程,僅做學(xué)習(xí)用途。另一方面,當(dāng)與現(xiàn)代化的工具鏈以及各種支持類庫(kù)結(jié)合使用時(shí),也完全能夠?yàn)閺?fù)雜的單頁(yè)面應(yīng)用提供驅(qū)動(dòng)??梢赃M(jìn)行確認(rèn)收貨后刪除訂單。 前言 每次寫文章時(shí),總會(huì)覺(jué)得比寫代碼難多了,可能這就是我表述方面的不足吧,然而寫文章也是可以復(fù)盤一下自己的開(kāi)發(fā)過(guò)程,對(duì)自己還是受益良多的。在這里簡(jiǎn)單敘述一下我仿某魚(yú)部分布局以及功能實(shí)現(xiàn)的過(guò)程,僅做...

    dreamGong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<