【发布时间】:2017-07-23 17:06:03
【问题描述】:
我正在尝试类似于redux-form 但在 Vue 和 Vuex 中。基本上它应该使表单的处理更加精简,并减少你编写的样板代码。
我遇到的问题是当我尝试将道具从 HOC 动态传递给组件时。我不太确定该怎么做。在 React 中,您只需执行以下操作:
<VfField unknownPropA="abc" unknownPropB="123" name="test" />
在 VfField.js 中:
export default ({name, ...props}) => <div name={name}><InputComponent {...props} /></div>
这将导致props 成为包含unknownPropA 和unknownPropB 的对象。
但在 Vue 中,我有一些看起来像这样的代码:
<vf-form @submit="submit" @validate="validate">
<vf-field type="text" name="username" unknownPropA="abc"></vf-field>
<vf-field type="password" name="password" unknownPropB="123"></vf-field>
<button type="submit">Submit</button>
</vf-form>
那么vf-field 怎样才能访问这些“未知”的道具并将它们传递给它们的子组件呢? $vm.$props 只产生了我明确声明的道具,但完全忽略了另一个(unknownPropA 和 unknownPropB)。我正在寻找“动态”传递道具的能力,因为它在许多情况下都非常有用。
注意:
到目前为止,我认为 Vue 非常适合简单的事情,而且启动和运行某些东西比在 React 中要快得多。但是,到目前为止,一旦某些东西“与众不同”,我发现 React 更有帮助。当然,这可能是由于我对 Vue 缺乏了解。
【问题讨论】:
-
我不认为有一个标准的方法来获取未声明的属性,你可以编写自己的方法来解析
this.$el.attributes作为一个 mixin,但我的另一个想法是 @Saurabh 在他的答案,它更安全,更好。 -
模板中的 props 应该写成 kebab-case 风格
unknow-prop-b并在你的组件中注册为props: ['unknownPropB']接受它们 -
老实说,我认为说它更好与否是一个品味问题。对我来说,将其编写为第三方库,我认为我的用户最好能够直接在 vf 字段上指定他们的道具,而不是通过“哑”道具指定它们。传递属性对我不起作用,因为用户需要能够传递的不仅仅是字符串。
-
对不起,但我没有得到这个“传递属性对我不起作用,因为用户需要能够传递的不仅仅是字符串” - 您可以通过道具传递任何类型的数据。
-
是的,只是
JSON.parse
标签: javascript frontend vuejs2 vue.js