-
Notifications
You must be signed in to change notification settings - Fork 42
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在基于route 做了 code splitting 的项目使用会出问题 #2
Comments
考虑过这个问题。 如果做 code splitting 的话,就只能把需要的 model 在组件中都引入,然后 所以这里只能推荐在项目设计上,把公共的部分提取成一个 "common" model,在上层引入,减少不同模块的相互依赖。 现在如果一个 model 在不同组件中注册,会进行提示,后续会考虑去除这个提示~ |
谢谢答复。 |
初步尝试了下我还是感觉setModel 这个用起来有点不舒服,更期望能和dva一样有个namespace类似的字段,来区分不同的模块,在加载这个model的时候就自动setModel(namespace, this); 我觉得dva那样做有个好处,这个model.js无论在哪里加载,他的namespace都固定,模块化更清晰,而现在手动引入再setModel给予模块名的话,是更灵活了,(逻辑相同的两个模块甚至可以引入同一个model.js 然后set不同的名字去使用),
我觉得如果setmodel用同样的名字应该是不被允许的,因为现在存在相同名字的model,state里面有相同的字段的话,修改的同时会影响另一个,这在使用的时候无感知的; 同时您在掘金上的文章提到,dva的dispatch写在业务代码里面会很丑,诚然它并不漂亮,但是还是很清晰的,type指向了 那个模块的model及对应的action,payload紧随其后,而且最重要是一看到这个dispatch马上能反映到这部分的逻辑被放到了model里,逻辑分离的好的话,相当于分离了个service层出去, flooks中 这部分道理和dva一致,甚至写起来不需要generate的写法,简洁,但是action是函数,名字定义随意一点的话,和普通的业务逻辑的函数是差不多的,
不知道我表达清楚意思没有,就是dispatch虽然很丑,写起来很长 好吧写到这里我觉得这点有点那个了,名字定义好还是可以规避的;就当我没说吧 0.0 |
感谢建议~ 1.
现在这样显示声明 当然,加 namespace 的方案也有好处,只是觉得从 API 互相的「连贯性」上来说可能不太直观。想用 namespace 的方案,其实可以直接在 model.js 文件中: export default setModel('someModel', {
state: {}
actions: ({ model, setState }) =>({})
}) 然后组件中 2.「someModel 已存在」的提示已经去掉,主要是如果启用了 HMR,每次热更新都触发函数调用,提示就很多余。
其实,同一个 model 文件比如 x, 3.dva 的显式调用 dispatch 的思路,各有利弊。Redux 也提供了 加上 ESLint,函数组件中,命名冲突会报错。另外就是,其实可以这样使用 const modelA = useModel('modelA');
const modelB = useModel('modelB');
// modeA.count
// modelA.increment() 不把 state 和 action 解构出来,这也算一种对不同变量加以区分的思路~ |
其实更准确的描述是,
比如我在 路由 /couter模块中使用了useModel('home'),但是setModel('Home')声明在/home
直接访问/couter就会出错,因为这时候/home还没有挂载,感觉这样的话还是要在顶层容器中集中遍历setModel下?这样就不是去中心化了,作者有没有考虑这方面怎么解决呢?因为在实际项目中, 基于路由的代码分割还是挺常见的
The text was updated successfully, but these errors were encountered: