在 formcontrol 中反应 bootstrap 只读输入

react bootstrap readonly input within formcontrol

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

但我想让在 FormControls 中生成的输入字段具有 readonly="readonly" 的属性。这样,此字段看起来与我的其他 FormControl 相同,但不会在 IOS 上提供键盘输入。

在我的例子中,输入将由日历选择器提供,该选择器将由弹出框触发。

有谁知道如何给 FormControl 参数 readonly="readonly",以便在浏览器中生成的 Input 字段将具有 prop readonly="readonly"?

非常感谢答案!

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

React-bootstrap 创建以下反应虚拟 dom 输入:

然而,react 生成了以下真实的 DOM 元素,省略了 readonly 属性:

也许使用 'disabled' 对您的情况有帮助:

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

有关只读和禁用之间的区别,请参见此处:

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


更新

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

所以应该是:

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

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

示例:

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