字段组件模型绑定(React)
React 包 @piying/view-react 提供了 use-*Model 系列 Hook,用于将原生表单控件与 Piying-View 的 ControlValueAccessorAdapter(CVAA)绑定。这些 Hook 返回可直接展开(spread)到原生控件的属性对象,免去手写值/事件绑定的样板代码。
React 版本的
use-*Model返回普通对象,直接{...model}展开即可。Solid 版本签名不同(返回createMemo计算信号),详见 Solid 版本。
前置:获取 CVAA
Section titled “前置:获取 CVAA”所有 use-*Model Hook 都接收一个 cvaa(ControlValueAccessorAdapter)作为第一个参数。通过 useControlValueAccessor() 获取:
文本输入 — useInputTextModel
Section titled “文本输入 — useInputTextModel”useInputTextModel(cvaa, compositionMode) 接收两个参数:
| 参数 | 类型 | 说明 |
|---|---|---|
cvaa |
CVAA | 控件值访问适配器 |
compositionMode |
boolean |
是否启用输入法组合模式(处理中文/日文等 IME 组合输入) |
返回属性:value、disabled、onBlur、onInput(组合模式下额外提供 onCompositionStart / onCompositionEnd)。
复选框 — useInputCheckboxModel
Section titled “复选框 — useInputCheckboxModel”返回属性:checked、disabled、onBlur、onChange。
数字输入 — useInputNumberModel
Section titled “数字输入 — useInputNumberModel”返回属性:value、disabled、onBlur、onInput。空值时转换为 undefined,非空时 parseFloat 转数字。
单选按钮 — useInputRadioModel
Section titled “单选按钮 — useInputRadioModel”useInputRadioModel(cvaa, value) 接收第二个参数 value,表示当前选项的值。返回属性:value、checked(根据当前值自动判断)、disabled、onBlur、onChange。
范围滑块 — useInputRangeModel
Section titled “范围滑块 — useInputRangeModel”返回属性:value、disabled、onBlur、onInput、onChange。空值时转换为 undefined,非空时 parseFloat 转数字。
下拉选择 — useSelectModel
Section titled “下拉选择 — useSelectModel”useSelectModel(cvaa, multiple) 接收第二个参数 multiple 控制单选/多选:
| 参数 | 类型 | 说明 |
|---|---|---|
multiple |
boolean |
false 单选,true 多选 |
单选时 onChange 写入 selected[0],多选时写入整个选中数组。
完整示例:文本输入
Section titled “完整示例:文本输入”Hook 汇总
Section titled “Hook 汇总”| Hook | 目标控件 | 关键返回属性 | 额外参数 |
|---|---|---|---|
useInputTextModel |
<input type=text> |
value / onInput / onBlur |
compositionMode |
useInputCheckboxModel |
<input type=checkbox> |
checked / onChange |
— |
useInputNumberModel |
<input type=number> |
value / onInput |
— |
useInputRadioModel |
<input type=radio> |
value / checked / onChange |
选项 value |
useInputRangeModel |
<input type=range> |
value / onInput / onChange |
— |
useSelectModel |
<select> |
value / onChange |
multiple |