因为我之前一直用vue,vue里面都是直来直往的,没有什么拐弯的东西,用vue的人学dva的时候一定要注意几个点:
1、model相当于vue的vuex,里面包含了但向数据流的所有的控制
2、在vue中我们一般定义一个全局的头部标题字段,并且在mounted中调dispatch改变,但在dva的model中这段分为了两个部分,其中effects是异步修改数据时调用的, 也就是在react的componentDidMount的生命周期里面需要调用的是异步的effects的action,但如果是用户操作的某个方法是,可以直接调用reducers里面的action
3、注意如果在组件中要调用dispatch的话,必须导入connect,并且注入,才可以调用,不然会报不存在的方法
4、dva规定比较强制,如果你是异步的方法必须调用effects的action,绝对不能调用同步的reducers,否则会报错,但同步的操作可以调用异步的effects,但因为是异步的操作,数据有时不会直接变过来,如果是操作的话,建议用reducers的同步
5、2中说effects改变数据时不能直接修改state,要不直接用dispatch改变reducers中的某个值,要不直接将修改put进去,代码如下:
const
state = ()
=> ({
topTitle:
"我的名字"
});
export
default {
namespace:
'user',
state:
state(),
effects: {
*
getUserList({
payload,
request }, {
put,
titleName }) {
console.
log(
payload)
yield
put({
type:
'update',
payload: {
topTitle:
payload.
titleName
}
});
}
},
reducers: {
update(
state,
action ) {
return { ...
state, ...
action.
payload };
}
}
};
componentDidMount() {
// 改变标题的名字
this.
props.
dispatch({
type:
'user/getUserList',
payload: {
titleName:
'订单详情'
}});
}