dva使用心得
組件在異步數據到來前已經完成初始化,是導致constructor中無法取到所需數據的原因。所以最直接的方法,就是修改組件創建的時間
//把原來的組件內部控制顯示
/* <ComponentName show={modelName.show}/> */
//更改為狀態直接控制組件是否存在
{
? modelName.show && <ComponentName/>
}
//或者
{
? modelName.show ? <ComponentName/> : null
}
//或者更嚴謹一點
//由于項目中加入了用戶數據獲取失敗,需重新登錄,所以也就沒有加上后面這個
{
? modelName.show && modelName.needData && <ComponentName/>
}
目標組件不會在頁面加載時就初始化
而是在用戶點擊控制按鈕,需要使用組件時,才初始化
?問題and心得:
1.初始化數據是怎么執行的。
2.connect怎么傳輸數據的。
3.什么時候寫全局model,什么時候寫局部model。
4.什么時候會是同步,什么時候使用同步。
5.能否使用@connect({sms})來把model層的數據傳遞到當前組件。通過this.props.sms可以獲取到model里sms.js中的state數據)
6.流程:dispatch時候models里面的effect,models中的effect會yield call已經import進來的service里面的action,然后service里面,action會調用request,把url和數據傳輸給后臺,然后在models里面yield完畢后,能獲取到responce傳過來的數據。
7.model相當于vue的vuex,里面包含了但向數據流的所有的控制
8.在vue中我們一般定義一個全局的頭部標題字段,并且在mounted中調dispatch改變,但在dva的model中這段分為了兩個部分,其中effects是異步修改數據時調用的, 也就是在react的componentDidMount的生命周期里面需要調用的是異步的effects的action,但如果是用戶操作的某個方法是,可以直接調用reducers里面的action
9、注意如果在組件中要調用dispatch的話,必須導入connect,并且注入,才可以調用,不然會報不存在的方法
10、dva規定比較強制,如果你是異步的方法必須調用effects的action,絕對不能調用同步的reducers,否則會報錯,但同步的操作可以調用異步的effects,但因為是異步的操作,數據有時不會直接變過來,如果是操作的話,建議用reducers的同步
11.call:執行異步函數(以異步的方式調用函數)
put:發出一個 Action,類似于 dispatch
select:從state中獲取相關的數據
take 獲取發送的數據
12.需要數據時,是否需要在componentDidMount里面去請求。
13.query是請求的哪兒
14.延遲加載
1.能否使用@connect({sms})來把model層的數據傳遞到當前組件。通過this.props.sms可以獲取到model里sms.js中的state數據)
?
2.流程:dispatch時候models里面的effect,models中的effect會yield call已經import進來的service里面的action,然后service里面,action會調用request,把url和數據傳輸給后臺,然后在models里面yield完畢后,能獲取到responce傳過來的數據
@font-face { font-family: "Times New Roman"; }@font-face { font-family: "宋體"; }@font-face { font-family: "Calibri"; }p.MsoNormal { margin: 0pt 0pt 0.0001pt; text-align: justify; font-family: Calibri; font-size: 10.5pt; }span.msoIns { text-decoration: underline; color: blue; }span.msoDel { text-decoration: line-through; color: red; }div.Section0 { }
轉載于:https://www.cnblogs.com/zz-zrr/p/9681152.html
總結
- 上一篇: BBS-登录
- 下一篇: 【laravel】【转发】laravel