react+ant design pro 2.0+dva 後臺管理系統,學習筆記
1.如果你熟悉 HTML,那麼 JSX 對於你來說是沒有任何壓力的,因為 HTML 中的所有標籤,在 JSX 中都是支援的,基本上沒有學習成本,只有如下幾點略微的不同: class 屬性變為 className tabindex 屬性變為 tabIndex for 屬性變為 htmlFor textarea 的值通過需要通過 value 屬性來指定 style 屬性的值接收一個物件,css 的屬性變為駝峰寫法,如:backgroundColor。 2.需要注意,不管那種方式,元件的名稱首字母必須為大寫。嚴格來說,是 JSX 要求使用者自定義的元件名首字母必須為大寫 3.屬性必須為只讀的,這一點非常重要,請嚴格遵守。對應到上面說到的,如果把元件理解為一個函式,那麼這個函式必須為一個純函式(Pure function),在純函式中不能修改其引數,確定的輸入必須有確定的輸出。 雖然有些時候,你修改了元件的屬性,貌似也能正常工作。沒錯,因為 JavaScript 語言特性的原因,沒人能阻止你這麼做。但是請先相信我,嚴格遵守這條規則不僅能讓你少踩很多坑,而且能讓你的應用穩定性更強、維護性更強。如果你直接修改元件的屬性,React 並不會感知到此修改,從而不會重新渲染元件,就導致了當前元件的檢視展示與資料不一致。 4.React 提供了相應的機制可以設定元件屬性的預設值,如下所示,你需要通過元件的靜態欄位 defaultProps 來設定元件屬性的預設值。如下所示: import React, {Component} from ‘react’; class HelloMessage extends Component { render() { return
擴充套件運算子 擴充套件運算子用三個點號表示,功能是把陣列或類陣列物件展開成一系列用逗號隔開的值
var foo = function(a, b, c) { console.log(a); console.log(b); console.log©; } var arr = [1, 2, 3]; //傳統寫法 foo(arr[0], arr[1], arr[2]); //使用擴充套件運算子foo(…arr);//1 //2 //3
ES6 yield 一、介紹 yield 關鍵字用來暫停和繼續一個生成器函式。我們可以在需要的時候控制函式的執行。 yield 關鍵字使生成器函式暫停執行,並返回跟在它後面的表示式的當前值。與return類似,但是可以使用next方法讓生成器函式繼續執行函式yield後面內容,直到遇到yield暫停或return返回或函式執行結束。 二、使用 函式返回物件包括value和done。其中value值是yield後面表示式值或return後面表示式值。done用於表示函式執行 function* ge() { //宣告時需要新增*,普通函式內部不能使用yield關鍵字,否則會出錯 yield ‘1’; yield ‘2’; yield ‘3’; return ‘4’; }
var a = ge(); //呼叫函式後不會執行,而是返回指向函式內部狀態的指標 a.next(); // { value: ‘1’, done: false } 遇到yield暫停 a.next(); // { value: ‘2’, done: false } a.next(); // { value: ‘3’, done: false } a.next(); // { value: ‘4’, done: true} 函式執行完畢,返回done a.next(); // { value: undefined, done: true} 已經執行完畢,返回undefined 如果next沒有帶有引數true,yield不能返回值,返回undefined;next函式帶有引數true,即.next(true)時,那麼yield就可以返回表示式的值,用於賦值。如果next帶有其他引數,那麼它就會將當前yield返回值置為該引數。如: var i = yield 1; // 將1賦值給i 三、for…of for…of迴圈可以自動遍歷Generator函式時生成的Iterator物件。 function* ge() { yield ‘1’; yield ‘2’; yield ‘3’; return ‘4’; }for(let v of ge()){ alert(V); // 1 2 3 4 }
四、yield與非同步 函式在遇到yield後暫停執行,我們可以在需要的地方使用next讓它繼續執行。並且必要時可以使用next傳入引數。 對於一些可能被多處引用的功能模組,建議提煉成業務元件統一管理。這些元件一般有以下特徵: 只負責一塊相對獨立,穩定的功能; 沒有單獨的路由配置; 可能是純靜態的,也可能包含自己的 state,但不涉及 dva 的資料流,僅受父元件(通常是一個頁面)傳遞的引數控制。
model裡面包括以下五部分:namespace、state、reducers、effects、subscriptions,缺一不可。注意,這裡也需要從service層匯入相應的方法。 namespace 名稱空間 namespace: ‘projects’ state 相當於原生React中的state狀態,用於存放資料的初始值。 state: { projectsData: []} reducers 用於存放能夠改變view的action,這裡按照官方說明,不應該做資料的處理,只是用來return state,從而改變view層的展示。 reducers: { getProjectAllData(state, action) { return { …state, …action.payload }; }, } effects 用於和後臺互動,是處理非同步資料邏輯的地方。 effects: { *getAllProjects({ payload = {} }, { call, put }) { try { const res = yield call(projectsService.checkBranches, payload); yield put({ type: ‘getProjectData’, payload: { projectsData: res.data } }); } catch (e) { message.warning(e.message); } }, } subscriptions 訂閱監聽,比如監聽路由,進入頁面如何如何,就可以在這裡處理。相當於原生React中的componentWillMount方法。就比如上述程式碼,監聽/project路由,進入該路由頁面後,將發起getAllProjects aciton,獲取頁面資料。 subscriptions: { setup({ dispatch, history }) { return history.listen(({ pathname }) => { if (pathname === ‘/projects’) { dispatch({ type: ‘getAllProjects’ }); } }); } } 資料流向 資料的改變發生通常是通過使用者互動行為或者瀏覽器行為(如路由跳轉等)觸發的,當此類行為會改變資料的時候可以通過 dispatch 發起一個 action,如果是同步行為會直接通過 Reducers 改變 State ,如果是非同步行為(副作用)會先觸發 Effects 然後流向 Reducers 最終改變 State。
在react怎樣引入jQuery 安裝jQuery npm i jquery -S 在那個地方使用jQuery就在什麼地方引入jQuery import $ from ‘jquery’
類似
使用Link,先引入Link import { BrowserRouter as Router, Route, Link } from ‘react-router-dom’ 有個很笨的辦法可以出來效果:用menu的點選事件獲取當前option的key存入state中,顯示內容根據key值判斷顯示隱藏。方法雖然很笨,但是效果還行!
導航欄樣式,好好看
上,模型展示時必須引jquery
改layout佈局樣式,(我只改了margin)
解決es6相容ie問題。上述兩行程式碼
百度:Generator函式