如何使用 React 使文本输入不可编辑?

How can I make a text input non editable with React?

我搜索了这个,我找到的最接近的是这个 SO post here;但是,它不使用 React。

我在 React 组件中尝试了下面的语法:

  <input 
    value={props.value}
    onChange={props.onChange} 
    className={props.className}
    placeholder={props.placeholder}
    name={props.name} {props.readonly && 'readonly'}>

但是我得到一个 eslint 解析错误,当我检查 UI 它仍然是可写的。

props.readonlytrue 时,您可以有一个没有 onChangeinput。 像这样:

<input 
    value={props.value}
    onChange={props.readonly ? undefined : props.onChange} 
    className={props.className}
    placeholder={props.placeholder}
    name={props.name}
/>

删除{props.readonly && 'readonly'} 并添加 readonly={props.readonly} 只读属性说明参见 here

你的问题是输入元素(和所有反应组件)只接受 key/value 对形式的 key={value},但你试图插入一些 javascript 代码没有将结果的值分配给键。

编辑:应该使用只读属性,而不是禁用,如评论中所述。

使用 属性 readOnly 并传递一个布尔值

const Example = (props) => {
  return (    
      <input readOnly={props.readonly} value={props.title}/>   
  );
};

// Render it
ReactDOM.render(
  <Example title="Example using Hooks:" readonly={true}/>,
  document.getElementById("react")
);
[readonly] {color:red}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
<div id="react"></div>

您使用的答案不规范。

而不是使用

 ... readonly>

使用更常见的 HTML 语法如下:

readonly='readonly'

然后选择一种在 React / JSX 中实现的方法。