关于 vue 分割 template 的问题

2019-08-22 18:02:38 +08:00
 guorui112

写 vue 的时候,会遇到一个页面 template 中标签过多的问题,我一般都会分割成一个个小模块,但是有的时候,会纠结模块的数据,是由父级通过 props 传递下来,还是在小模块中直接调用接口请求,这些小模块在某些情况下,需要和另一个小模块通信,数据传递的时候很是麻烦,有没有什么规范类的东西,可以让我了解一下在哪里拿数据比较好,感谢各位大佬

3818 次点击
所在节点    JavaScript
13 条回复
chenlaocong
2019-08-22 18:31:48 +08:00
我也有这种疑惑。不过我一般没有复用的话就直接在子组件调用接口了
molvqingtai
2019-08-22 18:47:29 +08:00
我也很纠结这个问题,我更倾向于从父级传下来,这样父组件里面统一处理逻辑,子组件负责渲染,但是有时候明明在子组件处理更简洁,非得到父组件绕一圈
mamahaha
2019-08-22 19:00:07 +08:00
有好办法的,可惜好办法太值钱,大神们都不说
royzxq
2019-08-22 19:10:31 +08:00
vuex
q8164305
2019-08-22 19:14:19 +08:00
等一位大神,我有时候也很纠结
luob
2019-08-22 19:38:49 +08:00
善用插槽功能, 划分组件的时候,把需要通信的核心小组件留下,而把无关的布局、样式独立到组件
像这样

``` jsx
<Page>
<Layout>
<InputWrapper>
<input type="text" value={} onChange={}></input>
</InputWrapper>
<ButtonWrapper>
<button onClick={() => { }}>Reset</button>
</ButtonWrapper>
</Layout>
</Page>
```
ookkxw
2019-08-22 19:39:32 +08:00
如果懂 react 的话可以参考 react context 传递方式,在方法内创建 component,这样数据可以在内存固化并且隔离,剩下的事情就简单了,做个监听器,数据改变通知
ChefIsAwesome
2019-08-22 20:05:07 +08:00
有共享需求,就得加中间人,把数据往上一级存。搞到最后就是全局状态了,那个时候代码写起来肯定是罗里吧嗦的。建议还是真的有这种需求的时候再往上存。平时就是小组件里头写,把请求+数据处理的那部分分离出来,这样即使后面要重构成数据往上存的情况,也非常容易。
SilentDepth
2019-08-22 21:18:44 +08:00
能用 slot 就用 slot,基本不用担心状态传递的问题了。但只适合一层嵌套的情况,嵌套层数多了就麻烦了。

用 provide/inject 可以应对嵌套层数较多的情况,或者更高级一点的用事件传播,两头约定好口径就可以为所欲为了。project/inject 可以保留可响应性,事件传播不能,这个谈不上优劣,看取舍。

想解决得更彻底一点,还可以用 Vue.observable( ),把共享状态分离出来,需者自取,皆大欢喜。如果敢于激进,使用 vue-function-api 可以获得更完善的工具包,运气好的话还可以在后面无缝过渡到 Vue 3。
shpasspass
2019-08-22 21:59:44 +08:00
那还是用 vuex 吧,相比 redux,vuex 已经很简单了。
zjsxwc
2019-08-23 08:01:33 +08:00
依赖倒置,依赖抽象呗

vue 组件通过 props 时各个组件之间相互持有,(包括父子组件,也包括你说的要通信的小组件之间),和面向对象的构造函数没有本质区别
deathscythe
2019-08-23 09:23:39 +08:00
#9 楼说得没错,最近项目都改成 vue-function-api
zhuweiyou
2019-09-05 18:23:43 +08:00
我一般是 页面级别请求。
除非是特殊的组件(比如省市区组件,在内部拉数据)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/594280

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX