dva model
原文:https://blog.csdn.net/lizhen_software/article/details/79455150
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:'订单详情'
}});
}
数据流向
数据的改变发生通常是通过用户交互行为或者浏览器行为(如路由跳转等)触发的,当此类行为会改变数据的时候可以通过 dispatch
发起一个 action,如果是同步行为会直接通过 Reducers
改变 State
,如果是异步行为(副作用)会先触发 Effects
然后流向 Reducers
最终改变 State
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类