在表单控件中react引导程序只读输入

IT技术 reactjs react-bootstrap form-control readonly-attribute
2021-05-19 09:49:28

我正在使用 react bootstrap,这个框架提供了一些不错的 FormControls。

但我想让在 FormControls 中生成的 Input 字段具有 readonly="readonly" 的props。这样,这个字段看起来和我的其他 FormControls 一样,但在 IOS 上不提供键盘输入。

在我的情况下,输入将由日历选择器提供,该选择器将由弹出窗口触发。

有谁知道如何给FormControl 参数readonly="readonly",这样浏览器中生成的Input 字段就会有prop readonly="readonly"?

非常感谢答案!

2个回答

它看起来不像是 react-bootstrap 的问题,而是 react 本身的问题。React 不会将 'readonly' prop 传输到生成的(真实的)DOM 元素:

React-bootstrap 创建以下 react 虚拟 dom 输入: 在此处输入图片说明

然而,react 生成了以下真正的 DOM 元素,省略了 readonly 属性: 在此处输入图片说明

也许在您的情况下使用“禁用”可能会有所帮助:

<FormControl
   disabled
   type="text"
   placeholder="Enter text"
   onChange={this.handleChange}
 />

有关只读和禁用之间的差异,请参见此处:https ://stackoverflow.com/a/7730719/1415921

我在 React 的 github repo 中创建了一个问题:#6783


更新

在得到上述问题的答案后。你需要用驼峰式写法:只读。

所以应该是:

<FormControl
   readOnly
   type="text"
   placeholder="Enter text"
   onChange={this.handleChange}
 />

老问题,新方法:利用 onChange 事件来控制是否调用 handleChange 事件。我将 editForm 定义为由按钮控制的props值,以查看我是处于查看模式还是编辑模式。

例子:

<TextField
        name="id"
        label="ID
        value={entityState.entity.Id || ""}
        onChange={(a) => (props.formEdit ? handleChange(a) : "")}
/>