Models中模块的划分应该以“页面纬度”来划分还是“数据纬度”来划分?
例如:
我的应用中的“数据”--- News新闻+User用户+Comment评论(3者数据独立)
我的应用中的“页面”---HomePage首页+UserPage我的页(2者都会不同程度使用到上面“数据”中的model和action)
1、创建HomePageModel和UserPageModel
在HomePageModel里面设计News+User的action和model
在UserPageModel里面设计User+Comment的action和model
2、建立NewsModel、UserModel和CommentModel
在HomePage页面中connect NewsModel、UserModel模块
在UserPage页面中connect UserModel、CommentModel模块
我应该基于哪种方式来设计Models呢?
@nikogu
我觉得这个例子并没有回答我的问题
因为这个例子中只涉及到“单页面”+“单数据”
所以它既可以理解为“页面”来划分Models,也可以理解为是按照“数据”来划分的。
PS:这里说的“页面”划分Models指的是每个页面创建一个model,“数据”划分Models指的是每个独立的数据单元或是业务逻辑创建一个model。
这个例子的理解:
1.“页面”划分Models---如果再有一个新的页面,页面展示comments评论列表和它对应的users用户列表。那么就应该在创建一个叫做usersAndMessages的model,来给这个新的页面使用。
2.“数据”划分Models---如果这个页面中还需要展现comments评论列表,就要再创建一个叫做comments的model。
我的理解应该是一个“页面”对应一个“model”。
但是“页面”之间有些需要复用的部分怎么处理这个问题呢?
最终还是要把复用的action、reducers从models中分离出来?
但是这样不就又回归了redux那种传统的写法了?
我的理解应该是一个“页面”对应一个“model”。
model 和页面并不需要一一对应,可以分开设计,页面上需要啥数据就通过 connect 获取。
@sorrycc
也就是说我可以把“数据纬度”和“页面纬度”完全分离,创建不同的models,在页面中connect对应的“页面纬度”的model和所需要的“数据维度”的model,是这样的吧。
function mapStateToProps(state) {
return {
// 数据维度创建的model
users: state.users,
comments:state.comments,
// 页面维度创建的model
homePage:state.homePage,
};
}
@zerozaki0752 对。
@sorrycc 谢谢!!!
还有一个疑问是关于action的
发现demo中的一些问题
1、model中effects、reducer中定义的方法,有些是model内部使用,有些则是要供view调用的(并没有明确的区分)
2、demo中view去调用action都是dispatch "namespace/functionName" 这样去调用的
3、在connect时并没有传入第2个参数mapDispatchToProps
我的预期的效果
在model中对需要view去调用的进行封装,之后mapDispatchToProps导入view中,view中可以直接通过props.namespace_functionName就可以触发action而不用每次dispatch
不知这样是否合理?是否可行?
这个看个人习惯了,我倾向于 dispatch(action) 的方式。
connect中没有传入mapDispatchToProps参数,来绑定action,但是可以使用dispatch调到任何一个model中的action?
被 connect
的 component 就会有 dispatch
的 props 。
Most helpful comment
@sorrycc
也就是说我可以把“数据纬度”和“页面纬度”完全分离,创建不同的models,在页面中connect对应的“页面纬度”的model和所需要的“数据维度”的model,是这样的吧。