react專案成型的個人心得

2021-09-02 22:49:35 字數 3037 閱讀 2973

此文是我在react專案搭建後對整個流程的一些環節進行整理和梳理,如有錯誤還請指正。

一般目錄結構搭建好後,我們會首先在src中開始工作,因為大多數**都是在src中完成的。

這裡要說乙個react專案的構建思想:

1 準備工作比較全面的目錄結構如下:

關於入口檔案以下是基礎和全面版:

2 建立主元件3拆分元件4.動態化修改這一步驟是非常關鍵的,直接決定做好的功能是否可用。首先將靜態的資料提取出來,需要儲存的在本頁面的state中儲存好,如果有多個頁面需要使用的資料或者互動的資料,這時就要引用redux,集中管理公用的狀態。

下面我們引入乙個業務場景,加入註冊頁面需要向伺服器傳送ajax請求。下面是圍繞著redux的一套比較固定的邏輯。

1.定義介面和方法

因為要傳送ajax請求,首先在api中定義好axios方法和針對於不同業務的請求函式。

注意:此處prefix為空,因為在開發環境中解決跨域問題可以使用proxy方法。

//定義註冊的請求

export const reqregister = data => ajax(`$/register`, data, 'post');

2.完成store

import thunk from 'redux-thunk';

import from 'redux-devtools-extension';

//引入reducers函式

import reducers from './reducers';

3.actions和action-type

actions內部是建立action物件的工廠函式,actions內會定義一些同步函式,為了方便儲存和reducers復用會儲存到actions-types中。當涉及到非同步函式時,我們會首先定義乙個同步函式,然後在非同步函式內呼叫同步函式。由於傳送ajax請求是非同步函式,所以採用如下寫法。

//定義同步action creator

export const authsuccess = data => ();

export const autherror = data => ();

需要定義兩個同步方法,因為註冊存在成功和失敗兩種情況,返回值不相同。

//定義非同步action creator

export const register = () => );

} else if (!password) );

} else if (password !== repassword) );

} return dispatch => )

.then(() => else ));}})

.catch(err => ));

})}}

4.reducers

這裡是真正更新store中狀態的地方。這裡定義了公用狀態的初始化值和更新狀態的方法。定義 方法時需要傳兩個引數,乙個是previousstate,另乙個是action,通過對action.type的判斷,就知道ajax請求失敗了還是成功了,從而通過return不同的值來控制store中狀態的不同。

//初始化狀態的值

const inituserstate = ;

function user(previousstate = inituserstate, action) ;

case auth_error :

return ;

case update_user_info :

return ;

case reset_user_info :

return

default :

return previousstate;

}}

當有多個函式時,可以使用合併reducers函式的方式

//預設暴露合併後的reducers函式

// , yyy: function yyy() {}}

export default combinereducers()

至此「redux無腦一頓操作』』 完成了請求方法的定義。現在只需要在註冊頁面中呼叫就好了,可是現在問題來了,這個方法怎麼從actions傳過去。

此處就用到了容器元件

import  from 'react-redux';

//引入ui元件

import register from '../components/register';

//引入action creators

import from '../redux/actions';

//暴露容器元件

export default connect(

state => (),

)(register);

然後在元件中以props的方式拿到傳遞過來的redux狀態和方法,就可以呼叫ajax請求如下。

register = async () =>  = this.state;

//傳送ajax

console.log(laoban, password, repassword, username);

//呼叫容器元件傳遞的更新狀態的方法

this.props.register();

}

至此,乙個react專案中比較簡單的業務邏輯基本完成。整個專案中會出現各種問題和更優的寫法,所以此套邏輯適用於一般業務邏輯場景,具體問題需要接待對待。

typedef個人心得

一直以來對typedef都沒有乙個正確的理解,導致看到稍微複雜一點的typedef語句就很是迷惑。今天在查閱了一些資料並仔細思考了一番後,自我感覺有一些比較深刻的了解了。主要的幾點感悟 1 typedef和define typedef 在編譯時被解釋,define在預處理時被替換。define定義 ...

專案部署,版本迭代個人心得

專案上線之後,版本的迭代必不可少,但是怎麼做才是相對規範,安全的呢?當然原專案備份是必不可少的了 首先對原專案打包 tar cvf wechat20150315.tar wechat 對專案版本的迭代,當然是改動越小越好,改動越小越安全越容易把控 所以呢,不要用本地環境的專案覆蓋生產環境上的專案。最...

寒假集訓個人心得

寒假之初,進行了幾天的集訓,在每天的忙忙碌碌之中,也是有了一些的收穫 1.搜尋的近一步理解,深搜與廣搜只是基礎的兩種實現形式,關鍵還在於對於搜尋的優化,剪枝水平尤為重要。2.dp可看作一種優化到極致的搜尋,在判斷好空間與時間複雜度的情況下,可採取記憶化搜尋,許多能用dp來完成的題目,記憶化搜尋也是可...