刚接触Dva的时候,对于model感觉一片茫然,看不懂不知道是什么意思。在之后的公司一个项目中慢慢的对model有了基本的理解。
model.js:
model层一般包含几个部分:
namespace:model的名字,用来在页面中找到要调用哪一个model,就想id一样。
state: 用来存放数据的地方。
subscriptions:在我看来就是绑定监听页面的,只有进入监听的页面才会触发,且在当前页面只会触发一次 列如:
subscriptions: {
setup ({ dispatch, history }) {
history.listen((location) => {//监听
if (location.pathname === '/storeManage/storeInfo') {//当进入这个页面的时候,就会调用下面的dispatch方法。
dispatch({
type: 'add',
payload:
location.query.id,
})}})},},
reducers:方法,经常就是调用来把页面,后台传来的值存入到state中:列如:
reducers:{
addSuccess(state,{payload:value}){
return {...state,...value}
//把传的值存入到state中
},
effects:异步的方法调用 例如:
effects: {
//上面监听进入storeManage/storeInfo这个页面,就会调用add这个方法:{payload}这里传的指就是上面payload的值:location.query.id,
* add ({ payload,}, { call, put }) {
const data = yield call(add, payload)
//yield call(add, payload) 异步请求,向add接口发出请求,传参为payload的值,data可以接受到后台传来的数据
if (data.code==200) {
//如果后台返回的状态码为200,就会执行,addSuccess方法,上面已经说了是把值传入到state中,这里就把后台请求到的数据data赋值给list 存入了state中,那样就可以在页面中通过调用state值获取到后台的数据了
yield put({
type: 'addSuccess',
payload: {
list:data
},
})
} else {
throw data
}
}
},
-------------------------------------------------------------------------------------------------------------------------------------------------------------------如遇到问题:+WX:WAZJ-0508,及时联系---------------------------------------------------------------------------------------------------------------------------------------------------