摘要:公司的前端技術棧是,而筆者之前使用的是,因此正好想利用的自己構建個的管理項目來加深的使用。會出現不在尾部的問題。
前言
在日常使用github中,除了利用git進行項目版本控制之外,最多的用處就是游覽各式的項目,在看到一些有趣或者有用的項目之后,我們通常就會順手star,目的是日后再看。但是當我們star了許多項目之后,回過頭想找一個的項目就會發現,很難在短時間內找到它,官方也并沒有提供很好的管理我們的star項目的功能,因此在市面上也出現了一些對star進行管理的工具,比如說 astralapp,Star Order等等,其實github的接口api都是開放的,我們完全可以自己構建一個屬于自己的項目管理工具。公司的前端技術棧是React,而筆者之前使用的是Vue,因此正好想利用github的open api 自己構建個react的github star管理項目來加深react的使用。而大體功能我們就模仿astralapp。
github open api官方文檔有v3和v4,2個版本,v3是Restful,v4是GraphQL,在這里我們使用的是v3版
v3使用的是restful 協議
服務器地址
https://api.github.com
在無token情況下使用github的api,每分鐘限制是60次請求,考慮到想完整的使用github的api,因此選擇構建一個web application,授權OAuth應用程序的流程可以參照官方文檔。在這里,就簡單的說一下這個流程。
授權OAuth2.0 的流程github OAuth的授權模式為授權碼模式,對OAuth不了解的同學可以具體看阮一峰老師的理解OAuth 2.0
要做的流程主要分為3步
獲取code
通過code獲取token
在請求時攜帶token
獲取code首先需要跳轉到這個地址
https://github.com/login/oauth/authorize
需要有以下參數
參數名 | 類型 | 描述 |
---|---|---|
client_id | string | 必選 client_id是在注冊github application后可以看到 |
redirect_uri | string | 可選 授權成功后跳轉的地址,這里的這個跳轉地址也可以在后臺進行設置 |
scope | string | 可選 權限范圍,具體的權限可以參照,具體傳值格式以及需要哪些范圍可以參照官方文檔 |
allow_signup | string | 可選 是否允許為注冊的用戶注冊,默認為true |
跳轉至目標地址后,會有個授權界面,當用戶點擊授權之后會重新跳轉到我們自己設定的redirect_uri并攜帶一個code,就像這樣
通過code獲取token?code=1928596028123
在獲取code之后,請求用于獲取token
POST https://github.com/login/oauth/access_token
參數名 | 類型 | 描述 |
---|---|---|
client_id | string | 必填 client_id是在注冊github application后可以看到 必填 |
client_secret | string | 必填 該參數是在同client_id一樣,也是在注冊application后可以看到 |
code | string | 必填 通過第一步獲取 |
redirect_uri | string | 可選 |
state | string | 可選 隨機數 |
token的默認返回格式為字符串
access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&token_type=bearer
可以通過更改頭部接受格式進行返回格式變更
Accept: application/json {"access_token":"e72e16c7e42f292c6912e7710c838347ae178b4a", "scope":"repo,gist", "token_type":"bearer"} Accept: application/xml在請求時攜帶tokenbearer repo,gist e72e16c7e42f292c6912e7710c838347ae178b4a
攜帶token有2種方式 一種是永遠跟在url的后面作為params
GET https://api.github.com/user?access_token=...
另外一種是放在請求頭中
Authorization: token 獲取到的token接口請求
在項目里運用到的github 接口 目前有三個
用戶信息接口
當前用戶star的項目
獲取項目Readme接口
需要注意的是這些接口由于服務端實現了CORS,因此是不存在跨域問題,但是,考慮到本身這個項目的功能情況,之后我們會自己建立服務端進行請求。
用戶信息接口GET https://api.github.com/user當前用戶star的項目
GET https://api.github.com/user/starred
可選的請求參數
參數名 | 類型 | 描述 |
---|---|---|
page | string | |
sort | string | 排序條件 有2種created updated,默認為created |
direction | string | 升序還是倒序 asc desc,默認為``desc |
GET https://api.github.com/repos/:username/:repo/readme
針對一些文件接口,github提供了頭部類型的選擇,可以返回不同的文件類型,比如raw等,具體可以參考官方文檔中的Custom media types
在這里我們需要的是html格式,因此 我們在頭部當中設置
"Accept": "application/vnd.github.v3.html"
這樣ReadMe返回的是html代碼,我們根據html代碼直接顯示即可。
目錄結構├── config // webpack相關文件 ├── public // 公用文件 ├── scripts // 腳本文件 build,start,test文件都在里面 ├── src ├── assets // 自己放置的資源文件 ├── components // 公用組件 ├── pages // 頁面文件 ├── utils // 公用方法文 App.css App.scss App.jsx index.css index.js logo.svg reset.css // 重置樣式 variable.css variable.scss // 公用變量文件 ├── package.json ├── .editorconfig // 編輯器配置 ├── .gitignore // git 忽略文件構建 create-react-app
構建React項目首先第一個想到的是用腳手架工具,Vue當中有Vue-cli,自帶webpack,vue-router,vuex,而React對應的是create-react-app
當我們初始化完成項目之后,我們會發現webpack的配置文件找不到,我們需要運行以下命令將wepack配置顯示出來
npm run ejectscss
這個方法參照的是create-react-app中的說明adding-a-css-preprocessor-sass-less-etc
npm install --save node-sass-chokidar
還需要裝 webpack watch
"scripts": { + "build-css": "node-sass-chokidar src/ -o src/", + "watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive", "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test --env=jsdom",
npm install --save npm-run-all
"scripts": { "build-css": "node-sass-chokidar src/ -o src/", "watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive", - "start": "react-scripts start", - "build": "react-scripts build", + "start-js": "react-scripts start", + "start": "npm-run-all -p watch-css start-js", + "build-js": "react-scripts build", + "build": "npm-run-all build-css build-js", "test": "react-scripts test --env=jsdom", "eject": "react-scripts eject" }
安裝好這些包之后,新建一個scss文件會自動生成css文件,我們在引用時直接引用css文件即可。
另外一種方法是參照medium的一篇文章CSS Modules & Sass in Create React App。
npm i sass-loader node-sass --save or yarn add sass-loader node-sass
隨后更改webpack.config.dev.js文件的配置
需要注意的是loaders用use代替,隨后在file-loader增加scss文件格式的匹配
跨域問題可以使用webpack自帶的proxy進行配置,或者通過ngix進行代理
如果是webpack配置需要在package.json當中進行配置
"proxy": { "/user": { "target": "https://api.github.com", "changeOrigin": true }, "/user/star": { "target": "https://api.github.com", "changeOrigin": true }, "/login": { "target": "https://github.com", "changeOrigin": true } }svg
目前使用了svg-react-loader
/* eslint-disable */ // 主要是這里 eslint會報錯 import Refresh from "-!svg-react-loader!../../assets/img/refresh.svg"; /* eslint-enable */ class StarFilter extends Component { constructor(props) { super(props); require.resolve("svg-react-loader"); this.state = { }; } componentDidMount() { } render() { return (顏色); } } export default StarFilter;STARS
改變顏色要使用fill屬性
.icon-refresh { width: 20px; height: 20px; fill: #606f7b; }注意
圖片中自帶的p-id元素在react中會自動變成pId,隨后會被react輸出警告日志,建議把pid 屬性刪除,這個屬性不影響顯示
我們經常在iconfont上下載svg圖片,但是有些svg圖片內部默認設置了顏色,如果要讓我們樣式當中的顏色起作用,建議在下載完svg后,檢查下默認的fill屬性是否存在,如果有請先刪除
引用本地圖片import NoSelectedImg from "../../assets/img/not-selected.svg"; class ResInfo extends Component { // ..此處省略 render() { } } export default ResInfo;
第二種方法是用require
需要注意的是如果是要在img標簽中使用svg圖片,還需要在webpack當中進行配置,在webpack.config.dev.js和webpack.config.prod.js當中大致在133行左右的urlLoader增加svg文件的匹配
{ test: [/.bmp$/, /.gif$/, /.jpe?g$/, /.png$/, /.svg$/], loader: require.resolve("url-loader"), options: { limit: 10000, name: "static/media/[name].[hash:8].[ext]", }路由
使用react-router-dom進行路由的管理,和Vue-router一樣,需要對要用到的路由級別組件進行注冊。直接將組件寫在router內部即可。
render() { return () }
Router中有BrowserRouter,HashRouter等,而這2種類似于Vue-router中的history和hash模式,需要注意的是,在我們這個項目當中必須使用BrowserRouter,如果使用HashRouter在github 授權重定向回我們頁面時會出現問題。會出現code不在尾部的問題。
import { Redirect } from "react-router-dom" class Auth extends Component { //省略... render() { // 如果isTokenError為true直接跳轉至首頁 if (this.state.isTokenError) { return () } // 如果hasCode有值則跳轉至star if (this.state.hasCode) { return ( ) } return ( ) } } export default Auth
同時它也支持api的跳轉,當組件放置在router中,組件props內置會有一個histroy屬性,即this.props.history,使用它就可以實現push,replace等跳轉了功能了。
/** * 返回首頁 */ go2home() { this.props.history.replace("/auth"); } /** * 前往star界面 */ go2star() { this.props.history.push("/star"); }總結
我們大致了解了項目的概況,在開發項目的過程當中,官方文檔是十分重要的,包括githubApi的使用,SCSS的使用,跨域問題等等,都能從官方文檔當中得到解答。同時github提供的api也是十分豐富的,基本囊括了所有github的基礎功能,在上述文章當中只是展示了它極少的功能,更多的功能大家可以自己來發掘。在接下來的文章當中,會為大家帶來服務端開發篇,使用node進行服務端,數據庫的一些操作。項目地址可以點我,項目還在初期開發中,就不要來star了=.=。
參考create-react-app
github open api接口文檔
REACT TRAINING / REACT ROUTER
在create-react-app創建的應用中配置Sass
廣而告之本文發布于薄荷前端周刊,歡迎Watch & Star ★,轉載請注明出處。
歡迎討論,點個贊再走吧 ????? ~文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/97766.html
摘要:學習之道簡體中文版通往實戰大師之旅掌握最簡單,且最實用的教程。前言學習之道這本書使用路線圖中的精華部分用于傳授,并將其融入一個獨具吸引力的真實世界的具體代碼實現。完美展現了的優雅。膜拜的學習之道是必讀的一本書。 《React 學習之道》The Road to learn React (簡體中文版) 通往 React 實戰大師之旅:掌握 React 最簡單,且最實用的教程。 showIm...
摘要:整理收藏一些優秀的文章及大佬博客留著慢慢學習原文協作規范中文技術文檔協作規范阮一峰編程風格凹凸實驗室前端代碼規范風格指南這一次,徹底弄懂執行機制一次弄懂徹底解決此類面試問題瀏覽器與的事件循環有何區別筆試題事件循環機制異步編程理解的異步 better-learning 整理收藏一些優秀的文章及大佬博客留著慢慢學習 原文:https://www.ahwgs.cn/youxiuwenzhan...
摘要:編程書籍的整理和收集最近一直在學習深度學習和機器學習的東西,發現深入地去學習就需要不斷的去提高自己算法和高數的能力然后也找了很多的書和文章,隨著不斷的學習,也整理了下自己的學習筆記準備分享出來給大家后續的文章和總結會繼續分享,先分享一部分的 編程書籍的整理和收集 最近一直在學習deep learning深度學習和機器學習的東西,發現深入地去學習就需要不斷的去提高自己算法和高數的能力然后...
閱讀 1758·2021-10-13 09:39
閱讀 1329·2019-08-30 13:58
閱讀 1419·2019-08-29 16:42
閱讀 3569·2019-08-29 15:41
閱讀 2999·2019-08-29 15:11
閱讀 2493·2019-08-29 14:10
閱讀 3419·2019-08-29 13:29
閱讀 2099·2019-08-26 13:27