1. 程式人生 > >前端開發快速入門

前端開發快速入門

### 一、瞭解前端技術棧 #### 1. react:前端開發語言(著重學習) - React是用於構建使用者介面的JavaScript框架,用於構建高效、快速的使用者介面。React 中一切都是元件。 - 虛擬dom #### 2. webpack:前端打包工具 - 一個開源的前端打包工具,將你的js、css、img、svg以更優的方式進行解析載入,配置靈活,功能強大 #### 3. ant-design:商戶側前端使用的UI元件庫(著重使用) - 是基於 Ant Design 設計體系的 React UI 元件庫,主要用於研發企業級中後臺產品 #### 4. dva:react非同步請求以及redux全域性資料流 - dva 首先是一個基於 redux 和 redux-saga的資料流方案 - 易學易用,僅有 6 個 api,對 redux 使用者尤其友好 #### 5. es6:JavaScript語言的下一代標準 - es5語言的升級,提供更加強大的語法糖,開發更加便捷,不但能減少程式碼量,還能解決原來沒有完善的問題 - 目前ES6也是使用最多的javaScript語言標準 #### 6.axios:一個基於 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中 - 從瀏覽器中建立 XMLHttpRequests - 從 node.js 建立 http 請求 - 支援 Promise API - 攔截請求和響應 - 轉換請求資料和響應資料 - 取消請求 - 自動轉換 JSON 資料 - 客戶端支援防禦 XSRF ![image](https://img2020.cnblogs.com/blog/749102/202010/749102-20201019213432643-228237111.png) ### 二、專案結構理解 ![image](https://img2020.cnblogs.com/blog/749102/202008/749102-20200823172424599-1381429417.png) #### 1. node_modules:前端元件庫管理包 - 安裝node後用來存放用包管理工具下載安裝的包的資料夾,例如react、webpack、輪播圖外掛等各種庫,以便專案使用,類似後端的nuget #### 2. package.json:專案元件庫版本管理檔案(如果我們用自己開發的元件庫,也是npm元件庫的讀取檔案) - 1.管理node_modules元件庫版本的配置檔案(常用) - 2.當你開發自己的元件庫,它也是作為元件庫的版本管理配置檔案(元件庫開發) #### 3. .babellrc:es6語法解析 - 下一代Javascript的標準,瀏覽器因版本的不同對此會有相容性問題 - .babelrc是Babel的配置檔案,放在專案根目錄下,結合webpack使用 #### 4. webpack配置檔案 開發環境和生產環境打包希望看到的效果肯定不一樣,比如生產環境需要壓縮程式碼,去除註釋,開發環境需要熱更新,不壓縮程式碼,所以需要存在一套開發環境版本和一套生產環境版本 - webpack.config.common.js:webpack公用檔案 - webpack.config.dev.js:webpack開發環境檔案 - webpack.config.prod.js:webpack生產環境檔案 #### node_modules和package.json ![image](https://img2020.cnblogs.com/blog/749102/202010/749102-20201018122042497-1342070660.png) #### 7. src:原始碼目錄components、configs、models、services、utils、index.ejs、index.js、Router.js ### 三、src原始碼目錄講解 開發一個頁面的流程: 1. components資料夾新建js元件、less樣式,進行前端靜態頁開發並連線dva 2. router.js路由檔案引入頁面元件,並放置到路由上 3. models資料夾寫入models檔案 4. services資料夾寫入services檔案 5. index.js註冊對應的models檔案或者在路由註冊 6. 前後端介面開發聯調 ![image](https://img2020.cnblogs.com/blog/749102/202010/749102-20201019214531076-481373190.png) #### 3.1 component 功能:存放開發的業務元件 包含: 1. js 2. less 3. imgs ##### jsx頁面結構介紹 ``` import React from 'react'; // 引用react元件 // import './less/test.less'; const param = 1; // 定義常量 // 名稱必須大寫 class Test extends React.Component { constructor(props) { super(props); // 定義state,在頁面或者傳遞資料使用 this.state = { num: 1, }; } // 定義事件 clickFunc = () => { let { num } = this.state; num++; this.setState({ num }); } render() { // 獲取state const { num } = this.state; return ( {/*渲染元素*/} {num} {/*點選修改元素*/} ) } } export default Test ``` ##### less樣式檔案介紹 ``` // 設定樣式 .content{ // 可設定巢狀樣式 .count{ } } ``` #### 資料講解 1.state:內部定義,它只是用來控制這個元件本身自己的狀態,頁面渲染通過setState進行完成。 2.setState: - 當我們呼叫這個函式的時候,React.js 會更新元件的狀態 state ,並且重新呼叫 render 方法,然後再把 render 方法所渲染的最新的內容顯示到頁面上 - React.js為了批次與效能並不會馬上修改state。而是把這個物件放到一個更新佇列裡面,稍後才會從隊列當中把新的狀態提取出來合併到 state 當中,然後再觸發元件更新。 3.props:外部傳入,包括父子元件之間的通訊,全域性資料流的傳遞 - 父子元件之間的通訊 - 全域性資料流的傳遞(dva) ![image](https://img2020.cnblogs.com/blog/749102/202009/749102-20200908155729377-2116849470.png) #### 3.2 models 定義每個頁面互動的名稱空間以及dispatch發起的行為方法和資料的處理 ``` import * as lightMemberRightsManage from '../services/lightMemberRightsManage'; export default { //表示對於整個應用不同的名稱空間,以便通過this.props.lightMemberRightsManage,規範保證名稱空間和當前頁面js名稱相同 namespace: 'lightMemberRightsManage', state: {}, // 表示當前的example中的state狀態,這裡可以給初始值 effects: { *lightMemberRightsManageGetList({ payload, callback }, { call, put }) { const testRes = yield call(lightMemberRightsManage.lightMemberRightsManageGetList, payload); //這裡的put表示儲存在當前名稱空間lightMemberRightsManage中,通過success方法存在當前state中 yield put({ type: 'success', payload: { lightMemberRightsManageGetListResult: testRes } }); // 回撥函式 callback && callback(testRes); // 可以promise.then使用 return testRes; } }, //用來儲存更新state值 上面的put方法呼叫這裡的方法 reducers: { success(state, { payload }) { return { ...state, ...payload } } } } ``` #### 3.3 services ``` // 非同步請求的中轉檔案 import axios from '../utils/axios'; // 請求地址的檔案 import Api from '../configs/api'; export function lightMemberRightsManageGetList(params) { return axios.get(configs.host.test + Api.lightMemberRightsManageGetList, { 'params': params }); } ``` #### 3.4 untils工具庫 定義自己寫的工具庫,例如非同步請求axios、資料擷取的公用函式js #### 3.5 index.js 1. 專案入口js檔案 2. 引用全域性樣式 3. 引用models檔案connect連線元件 4. 引用路由 #### 3.6 index.ejs 1. 單頁應用入口html檔案 ### 3.7 router.js 頁面路由 ``` import React from 'react'; import PropTypes from 'prop-types'; import { Switch, Route, routerRedux, } from 'dva/router'; import dynamic from 'dva/dynamic'; const { ConnectedRouter } = routerRedux; const RouterWrapper = ({ history, app }) =>
{ // 開發的元件 const Home = dynamic({ app, component: () => import('./components/Home'), }); return ( // 載入路由 }; ``` ### 四、頁面開發流程 ![image](https://img2020.cnblogs.com/blog/749102/202010/749102-20201018123756014-272735784.png) - 1.通過vscode外掛生成頁面元件、models、services - 2.路由註冊對應頁面 - 3.index.js引用對應的頁面models - 4.models,services進行細微調整 - 5.api介面地址調整對應後端介面地址 ### 五、實戰:使用腳手架開發商戶側專案 ``` // 全域性安裝fl-hscli,生成商戶側腳手架的命令(目前寫入的是mall商戶側) npm i fl-hscli -g // 進入想要建立專案的資料夾建立專案(projectName是你的專案名稱) create-react-app-fl projectName // package.json中fl-pro、fulu-method是公司內部元件庫,安裝模組包之前,先安裝公內部元件,不然會報錯 npm --registry http://10.0.1.244:8081/repository/npm-group/ install [email protected] --save // 安裝成功後,執行安裝模組包的命令,因為package.json模組非常多,可以使用淘寶映象進行安裝,安裝速度快 npm i cnpm i(需要先安裝淘寶映象) // 安裝成功後,啟動專案 npm start ``` ### 六、商戶側顯示效果 ![image](https://img2020.cnblogs.com/blog/749102/202010/749102-20201021170627927-1257318668.png) #### 注意 - 安裝nodejs,才可使用npm命令 - cnpm安裝:npm install -g cnpm --registry=https://registry.npm.taobao.org - 開發者執行的商戶側地址都需要在福祿管家配置回撥地址,否則頁面打不開,開發環境訪問使用自己開啟的域名(例如:http://192.168.0.105:3008)/?MerchantId=商戶id(bcc1adce-927a-4c0b-88c0-c446a0435b98 )進行訪問 ### 七、模組包下載工具 #### npm - npm是node官方的包管理器,如果沒有鎖定版本,通常會直接下載package.json中版本庫裡最高版本 - 下載速度慢,可能因為網路原因無法使用npm下載,或者是國外的庫無法進行下載 #### cnpm - cnpm是個中國版的npm,是淘寶定製的 cnpm,下載速度極快 - 每隔10分鐘去重新整理npm庫同步到cnpm - 不會讀取package.lock.json #### yarn - 斷點續傳,鎖定版本,不過npm5更新之後,兩者都沒有明顯的優劣勢 後續會做更加詳細的講解 ### 如何提高開發效率 #### js - 公用模組進行提取 1. 程式碼片段 2. vscode外掛 3. 封裝繼承 4. npm命令列進行專案程式碼匯入 #### css - 規範的間距、顏色、字型大小、行高、居中、浮動 #### 開發規範 - 1.按照目前的目錄結構進行開發 - 2.頁面的檔案命名具有語義化,對應使用的檔名與其保持一致,元件命名首字母需要大寫,其餘命名需要使用駝峰命名 ##### 好處 - 1.目錄結構清晰,根據頁面來查詢問題更加輕鬆便捷 - 2.同事接手也更簡單易懂,上手更快 ### 開發注意事項 - 如果引用的元件或者函式不支援按需載入,引用的話,會把所有功能都打包進來 - less檔案在生產環境會被打包在一起,所以每個頁面的less檔案最外層樣式必須唯一,不然會互相影響 - setState會渲染頁面,所以不要在render(渲染頁面的函式)裡使用setState,不然就會死迴圈,不要使用this.state賦值(不會重新渲染) - 不要直接給props賦值 - 後續會一直迭代... 福祿ICH·ERP專案部 福小松