我开源了一个可能是功能最全的表单库-支持 Angular,Vue,React,Svelte,Solid

18 天前
 wszgrcy929
interface Test {
  firstName: string;
}
const form = useForm<Test>({
  defaultValues: {
    firstName: "default",
  },
  onSubmit: async ({ value }) => {
    console.log(value);
  },
});
<form.Field
  name="firstName"
  //...
/>
const define = v.object({ firstName: v.optional(v.string(), "default") });
type Define=v.InferOutput<typeof define>
// 等价于
type Define = {
  v1: string;
};

皮影是如何实现上面的逻辑的?

定义是固定的,那么怎么实现布局呢?

v.intersect([
  v.pipe(v.object({}), setAlias("scope1")),
  v.object({
    key1: v.pipe(
      v.object({
        test1: v.pipe(v.optional(v.string(), "value1"), layout({ keyPath: ["#", "@scope1"] })),
      }),
    ),
  }),
]);

如何进行更加高级的布局?

v.pipe(v.number(), v.title("k2-label"), setWrappers(["label"]));
v.pipe(
  v.object({
    k1: v.pipe(v.string(), v.title("k1-label"), setWrappers(["label"])),
    k2: v.pipe(v.number(), v.title("k2-label"), v.minValue(10), setWrappers(["label", "validator"])),
  }),
  setComponent("fieldset"),
);

如何自定义包装器/组件?

现在是否可以使用?

732 次点击
所在节点    前端开发
2 条回复
gkinxin
17 天前
还是 antd 的表单好用
wszgrcy929
17 天前
@gkinxin 此表单库支持多种框架,并且不限表单库,更容易实现复杂逻辑,自带强类型
如果说仅仅是一些普通的表单.当然不需要
并且此定义可以直接用于后端,也就是说如果是一个全栈项目,那么只要实现一个定义,既可以显示表单,又可以创建实体,同时对传入的数据,还能自动进行验证

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

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

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

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

© 2021 V2EX