摘要:全家桶仿簡書部分功能前言前段時間接觸了下,一直想要自己寫一個小練手。在眾多應(yīng)用中,考慮之后選擇了簡書來模仿,這段時間就利用了工作之余的時間進(jìn)行開發(fā)。在這里簡單敘述一下我仿簡書部分布局以及功能實現(xiàn)的過程,僅做學(xué)習(xí)用途。
React-全家桶仿簡書部分功能 前言
前段時間接觸了下React,一直想要自己寫一個小Demo練手。在眾多應(yīng)用中,考慮之后選擇了簡書來模仿,這段時間就利用了工作之余的時間進(jìn)行開發(fā)。主要用到了React+React-Router4+Redux+Redux-thunk+Immutable。然而寫文章也是可以復(fù)盤一下自己的開發(fā)過程,對自己還是受益良多的。在這里簡單敘述一下我仿簡書部分布局以及功能實現(xiàn)的過程,僅做學(xué)習(xí)用途。技術(shù)棧以及組件庫
Redux:解決組件數(shù)據(jù)共享問題
Redux-thunk:Redux中間件,允許action可以返回函數(shù)
Immutable:保證數(shù)據(jù)的不可變
Loadable:異步加載組件
Transition-group:動畫實現(xiàn)
styled-components:組件化樣式
axios: 這個大家都知道吧-_-
數(shù)據(jù)結(jié)構(gòu):
文件結(jié)構(gòu)┣━ build // 打包文件 ┣━ public // 打包文件 ┣━ api //假數(shù)據(jù)統(tǒng)一存儲 ┣━ detail.json //文章頁數(shù)據(jù) ┣━ headerList.json //頭部熱門搜索數(shù)據(jù) ┣━ home.json //首頁統(tǒng)一數(shù)據(jù) ┣━ homeList.json //首頁加載更多文章數(shù)據(jù) ┣━ login.json //登錄數(shù)據(jù) ┣━ src //開發(fā)目錄 ┣━ common //公用組件 ┣━ header //頭部組件 ┣━ store //Redux文件 ┣━ actionCreators.js //action創(chuàng)建 ┣━ constants.js //action.type常量文件 ┣━ index.js //入口文件 ┣━ reducer.js //reducer處理 ┣━ store //UI組件 ┣━ store //頭部樣式 ┣━ pages //頁面 ┣━ detail //文章頁 ┣━ ... ┣━ detail //首頁 ┣━ ... ┣━ detail //登錄頁 ┣━ ... ┣━ detail //寫文章 ┣━ ... ┣━ statics //靜態(tài)文件 ┣━ ... ┣━ store //Redux數(shù)據(jù) ┣━ ... ┣━ App.js //入口及路由 ┣━ index.js //js文件入口 ┣━ style.js //全局樣式 ┣━ .gitignore //git忽略上傳文件 ┣━ package.json //模塊的描述文件 ┣━ README.md //說明文件 ┣━ yarn.lock //模塊的描述文件效果預(yù)覽 實現(xiàn)主要幾個功能
登錄退出及未登錄攔截
用戶在已登錄狀態(tài)和未登錄狀態(tài)的界面是不同的,有些功能指定要在登錄狀態(tài)下才會有,因此會產(chǎn)生狀態(tài)的切換,在一般小項目中我們可以使用localStorage來存儲狀態(tài),也可以用Redux,這里我所有的數(shù)據(jù)都是使用Redux進(jìn)行數(shù)據(jù)管理,在進(jìn)入寫文章頁面調(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"]) });
點擊加載更多文章
這里在Redux中儲存一個Page:1的數(shù)據(jù),在每次點擊加載更多文章時page+1,然后對page進(jìn)行改變。使得每次點擊page+1。
頭部熱門搜索獲取及切換
在Home組件獲取到數(shù)據(jù)后儲存到Redux中,然后取出前十條數(shù)據(jù),儲存到常量中。通過點擊事件對數(shù)據(jù)進(jìn)行切換,同時出發(fā)動畫效果。(由于使用了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(); //因為list目前是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 () }else { return null; } } 熱門搜索 hanleChangePage(page,totalPage,this.spitIcon)}> {this.spitIcon = icon}} className="iconfont spin"> 換一批 {pageList}
文章頁數(shù)據(jù)
文章頁數(shù)據(jù)的獲取使用的動態(tài)路由,通過路由傳參將當(dāng)前所點擊文章的ID傳遞到文章頁。
同時也可以通過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時使用,不會被轉(zhuǎn)義為字符串 render() { const { title, content } = this.props; return (結(jié)語) } componentDidMount() { let idPage = this.props.location.search; const id = idPage.substring(4) this.props.getDetail(id); //使用動態(tài)路由獲取idthis.props.getDetail(this.props.match.params.id); } } {title}
由于工作比較忙,所以只做了一些基礎(chǔ)的小功能。后面還有很多有待完善,等空余時間多了出來回慢慢進(jìn)行完善。由于剛接觸React,所以做的不太好,不足之處還請指教。如果你初次接觸到React,或者對Demo感興趣的話可以查看我GitHub源碼
如果對你有幫助,可以star我的項目給我一點點的鼓勵,也希望有志同道和的可以加入一起討論,我也會第一時間幫你解答。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/99364.html
摘要:最近在學(xué)習(xí)覺得超好用,忍不住自己仿了個騰訊課堂練練手,不當(dāng)之處還請大家指正持續(xù)更新中。的使用的狀態(tài)存儲是響應(yīng)式的。需要注意類似于,不同在于提交的是,而不是直接變更狀態(tài)。 最近在學(xué)習(xí)vue,覺得超好用,忍不住自己仿了個騰訊課堂練練手,不當(dāng)之處還請大家指正(持續(xù)更新中)。 效果預(yù)覽 ?在線預(yù)覽:點我!!!在線預(yù)覽,手機瀏覽或切換瀏覽器移動調(diào)試 ?源碼地址:Github??求你的小星星~...
摘要:最近在學(xué)習(xí)覺得超好用,忍不住自己仿了個騰訊課堂練練手,不當(dāng)之處還請大家指正持續(xù)更新中。的使用的狀態(tài)存儲是響應(yīng)式的。需要注意類似于,不同在于提交的是,而不是直接變更狀態(tài)。 最近在學(xué)習(xí)vue,覺得超好用,忍不住自己仿了個騰訊課堂練練手,不當(dāng)之處還請大家指正(持續(xù)更新中)。 效果預(yù)覽 ?在線預(yù)覽:點我!!!在線預(yù)覽,手機瀏覽或切換瀏覽器移動調(diào)試 ?源碼地址:Github??求你的小星星~...
摘要:閉包有多重前端知識點大百科全書前端掘金,,技巧使你的更加專業(yè)前端掘金一個幫你提升技巧的收藏集。 Vue全家桶實現(xiàn)還原豆瓣電影wap版 - 掘金用vue全家桶仿寫豆瓣電影wap版。 最近在公司項目中嘗試使用vue,但奈何自己初學(xué)水平有限,上了vue沒有上vuex,開發(fā)過程特別難受。 于是玩一玩本項目,算是對相關(guān)技術(shù)更加熟悉了。 原計劃仿寫完所有頁面,礙于豆瓣的接口API有限,實現(xiàn)頁面也有...
摘要:前端日報精選大前端公共知識梳理這些知識你都掌握了嗎以及在項目中的實踐深入貫徹閉包思想,全面理解閉包形成過程重溫核心概念和基本用法前端學(xué)習(xí)筆記自定義元素教程阮一峰的網(wǎng)絡(luò)日志中文譯回調(diào)是什么鬼掘金譯年,一個開發(fā)者的好習(xí)慣知乎專 2017-06-23 前端日報 精選 大前端公共知識梳理:這些知識你都掌握了嗎?Immutable.js 以及在 react+redux 項目中的實踐深入貫徹閉包思...
摘要:在這里簡單敘述一下我仿某魚部分布局以及功能實現(xiàn)的過程,僅做學(xué)習(xí)用途。另一方面,當(dāng)與現(xiàn)代化的工具鏈以及各種支持類庫結(jié)合使用時,也完全能夠為復(fù)雜的單頁面應(yīng)用提供驅(qū)動。可以進(jìn)行確認(rèn)收貨后刪除訂單。 前言 每次寫文章時,總會覺得比寫代碼難多了,可能這就是我表述方面的不足吧,然而寫文章也是可以復(fù)盤一下自己的開發(fā)過程,對自己還是受益良多的。在這里簡單敘述一下我仿某魚部分布局以及功能實現(xiàn)的過程,僅做...
閱讀 905·2021-09-03 10:42
閱讀 1516·2019-08-30 15:56
閱讀 1451·2019-08-29 17:27
閱讀 877·2019-08-29 15:25
閱讀 3163·2019-08-26 18:27
閱讀 2485·2019-08-26 13:41
閱讀 1893·2019-08-26 10:39
閱讀 1581·2019-08-23 18:36