3 个不稳定版本
0.2.1 | 2024 年 7 月 31 日 |
---|---|
0.2.0 | 2024 年 7 月 31 日 |
0.1.0 | 2024 年 6 月 19 日 |
#1458 in 网页编程
264 每月下载量
130KB
2.5K SLoC
leptos_form_tool
leptos 的声明式表单创建方法。
leptos_form_tool 允许您以声明式的方式定义表单。需要一个文本框?只需在表单构建器上调用 .text_input
。然后,分别定义一个 FormStyle 来指定该文本框应该如何渲染。这有几个优点
- 将表单布局与其渲染和样式分离
- 允许快速切换不同的样式
验证
您可能会问,为什么不直接使用组件呢?
创建 leptos_form_tool 的最大原因是支持验证字段。这种验证逻辑可能相当复杂,例如,您可能希望在用户点击提交时在客户端执行验证,以便立即向用户提供关于任何无效输入的反馈。但您通常还希望在服务器上执行相同的验证,以保护不受来自您的客户端或未启用 WASM 的用户的请求。
此外,您可能希望根据另一个控制器的值更改一个控制器的验证。例如,您可能想确保“日”字段在有效的范围内,但这个范围取决于用户在“月”字段中的选择。或者您可能想确保“确认密码”字段与“密码”字段匹配。leptos_form_tool 使这变得容易,因为您提供的验证函数作用于整个表单的数据。
有时您可能不想显示某些控件,并且这些控件的验证只能在它们可见时进行。
lepos_form_tool 会为您处理所有这些。
FormStyle
为了定义表单可能使用的所有组件的渲染方式,您需要定义一个实现 FormStyle
特性的类型。这个特性为表单可能需要渲染的每个控件都有一个方法。要使用这种新样式,只需更改您的表单的 Style
关联特性为您的新类型即可。
实际上,这比那要复杂一点...
为了给自定义样式提供更多的自由度,以便根据每个控件独立配置其渲染方式,样式将定义一个关联的类型(通常是枚举),称为 StylingAttributes
。可以通过在控件构建器上调用 .style(/* style */)
来向控件添加样式属性。这些样式属性在渲染该控件时对 FormStyle
实现是可访问的。
因此,替换样式也要求替换所有的 .style()
调用。
构建器
leptos_form_tool 大量使用了构建器模式。您将通过在构建器上调用方法来构建表单、控件,有时甚至验证函数,构建器根据您提供的值构建对象。
上下文
有时,您可能希望能够使用表单上下文中的某些内容来渲染表单。例如,您可能希望使用用户的令牌作为上下文,如果他们是管理员,则仅渲染表单的一部分。或者,您可能需要动态获取某个下拉列表的选项。表单的上下文是解决这些问题的方案。
在表单上,您定义关联的类型 Context
。然后,每次构建一个 Form
时,都必须提供该上下文。上下文可用于构建表单,并可以改变要渲染的控件。每个控件构建器函数(例如 .text_input()
)都有一个上下文变体(例如 .text_input_cx()
),允许您在构建该控件时使用上下文。
为了避免很多麻烦,上下文一旦传递到表单就不可变。然而,您可以在上下文中使用 leptos 信号,因为您不需要可变访问来调用信号的 get/set。
由于上下文可以改变表单的渲染方式以及显示/隐藏的控件(从而改变要验证的控件),因此需要在服务器端验证表单数据时使用上下文。通常,在服务器上验证表单时,您应该传递与客户端相同的上下文,以确保验证逻辑相同。如果您确信更改上下文不会改变任何验证,则可以在服务器和客户端使用不同的上下文。
需要注意的是,对于不显示的控件(例如,.show_when(/* condition */)
的条件评估为 false
),该字段的验证不会运行。
自定义组件
leptos_form_tool 支持在用户空间中定义自定义组件。这使 leptos_form_tool 能够不受限制地执行操作。表单构建器上有 custom_*
方法,允许您添加组件。
入门指南
通过示例学习,请参阅 示例项目。
要遵循入门指南,请参阅 getting_started.md
。
兼容性
form_tool 版本 | leptos 版本 |
---|---|
0.1.0 | 0.6 |
0.2.0 | 0.6 |
贡献
要贡献,请分叉存储库并创建一个 PR。如果您发现一个错误,请随时打开一个 issue。
通过贡献,您同意您的更改受以下许可协议的约束:/LICENSE
。
依赖项
~20-32MB
~524K SLoC