






















这是一个创建于 318 天前的主题,其中的信息可能已经有所发展或是发生改变。
请问 VUE 佬们在开发大表单的时候怎么设计绑定对象的?直接在 data 中声明所有表单项来绑定吗?那岂不是会有很多冗余代码?而且如果多个组件都使用这个对象,对象在传递的时候是不是每个组件中又需要声明一次? 刚从后端学习前端,希望能有大哥指点指点,按照后端的逻辑,这个表单不是应该设计为一个对象,每个组件直接复用对象即可,传递也传递对象,但是现在开发过程中出现不少问题,搜了之后好像说不能绑定 js 的类对象。。。。。。
1 lyonbot 2025 年 7 月 31 日 via Android你需要的是不是 store 或者说是全局状态管理? |
2 andyshz 2025 年 7 月 31 日并不全是吧,主要我只想要这个对象在一个模块中使用,并且希望做到的就是尽可能地减少冗余代码,我对这一块地设计不是很熟悉 |
3 Dlad 2025 年 7 月 31 日1 、可以全局声明; 我不是职业搞前端的,对最佳实践了解有限。我们自研的 vue 项目按一般软件工程逻辑优化到这个程度。 |
4 M003 2025 年 7 月 31 日方法 1. 父级声明出大对象,然后 v-model 将整个大对象 绑定到子组件;子组件内可以定义变量,也可以不声明变量,子组件可以监听到父组件传递给子组件的 value, 然后深拷贝覆盖子组件声明的变量(未声明直接赋值,当然必须声明个变量是 undefined ), 修改这个变量,监听变量变化,$emit 传递出去给父组件。 方法 2. 父组件声明出大对象,对象结构明确。给每个子组件只传递需要的对象中的参数,只修改父组件对象中的某个参数,这样不方便于别的组件读取其他变量。(传递方法和上面一样。) 就不用 store 了。 我这是野路子,自己写代码摸索的。 |
5 Elissa 2025 年 8 月 1 日 |
6 hafuhafu 2025 年 8 月 1 日工厂模式。你可以写一个函数用来生成这个对象,而不是直接定义对象。 |
7 SaigyoujiNono 2025 年 8 月 1 日 via Android我一般 export form |
8 wangtian2020 2025 年 8 月 1 日多层数据传递直接扔 pinia store 里,组件要的时候自己去取,想当于一个全局共享的 ref 对象。单层就随便传传了,看你自己怎么方便,不要教条 |
9 layxy 2025 年 8 月 1 日我也是后端,如果页面复杂,尤其有分步操作,建议上状态管理(vue2 的 vuex 或 vue3 的 pinia),但是使用状态管理也有个操蛋的事情,状态读数据和写数据时分开的,虽然可以在 computed 中 get,set,但是这个机制我没搞明白如果获取的对象是个复杂嵌套对象,我修改深层的属性值,这种用法是否正确 |
10 heybwei 2025 年 8 月 1 日其实你的问题描述得不是让人很明白,如果能贴一些大概的结构或伪代码就好了 |
11 chenluo0429 2025 年 8 月 1 日 via Android如果你有一个大的表单对象,有很多字段,然后需要用不同的表单组件去提供对应字段的编辑,正确的实践是子组件只关注它要显示和修改的字段值,并不需要关心原生的大对象。 |
12 faceRollingKB 2025 年 8 月 1 日表单设计不建议使用 vuex 或 pinia ,这两个都是用来管理全局变量的,管理局部模块化数据的话就有点吃力,我是使用 vue 自带的 providers ,再根据自己的想法封装了一套依赖注入来实现的,整体表单通过 FormModel 管理数据和表单项配置,并共享给整个组件树,每个表单项也都有专门的 FormControl 来对接表单的各种操作,但是从 0 到 1 的成本有点高,你要有心理准备 |
13 SchwarzeR 2025 年 8 月 1 日vue3 如果需要局部状态管理,业务上存在大量复用有必要封装的话,并且不需要考虑 ssr 的情况下,可以通过声明一个 Composition api 的函数( hook )做一个局部的变量初始化,然后用在需要的地方。这个在 https://cn.vuejs.org/guide/reusability/composables 亦有记载 但是如果会涉及到 ssr 的话,pinia 也可以做局部的模块化声明,就是麻烦一点 const onShow = ref(true) const formContextState = reactive({ // 内部使用 vue 的生命周期 api 比如销毁时清理 }) return { 不知道我理解的正确不正确 |
14 faceRollingKB 2025 年 8 月 1 日示例: <script setup lang="ts"> <template> <style scoped lang="less"></style> |
16 xingyuc 2025 年 8 月 1 日不同场景不同用法,写的再优雅也抵不过 AI 的冲击 |
17 jspatrick 2025 年 8 月 1 日页面声明大对象,再 provide/inject ,跨页面考虑 store |
18 wentx 2025 年 8 月 1 日vibe 了。。 也不知道 cursor 是咋写的,但是能用 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。