如何使一个数字在React中变得可编辑?

时间:2017-02-10 19:58:41

标签: javascript css reactjs

我有一个数字,点击后,应该可以编辑。我查看了表单输入和其他React库,但没有一个是我正在寻找的。下面的截图是模型。

enter image description here enter image description here

为了保持用户界面的一致性,我所做的就是在点击编辑按钮时在数字周围添加边框。 (以下代码简化为仅演示功能)

constructor() {
    this.state = {
        editModeEnabled: false
    }
}

handleEditClick() {
    this.setState({
        editModeEnabled: !this.state.editModeEnabled
    })
}

render() {
    let numberBox = null
    if (this.state.editModeEnabled) {
        numberBox = {
            border: '1px solid blue',
        }
    }

    <span style={dollarStyle}>$</span>
    <div style={numberBox}>
        {this.props.number}
    </div>

    <button onClick={this.handleEditClick.bind(this)}></button>
}

我想知道是否有办法在不改变数字外观的情况下使数字在某种输入字段中可编辑。我已经尝试将数字包装在<input>标记内,但是对输入标记进行样式设置很麻烦。

3 个答案:

答案 0 :(得分:2)

您可以使用<div contenteditable="true">

尽管如此,在这种情况下,最正确的方法可能是确定输入的好样式属性,因为contenteditable具有您可能不感兴趣的HTML属性。

答案 1 :(得分:1)

设置<input>的样式。还有其他方法可以解决这个问题,但没有一种方法可以简单地将CSS用于其预期目的。下面只是一个例子,你肯定需要为你的目标平台和设计做一些细微处理,但如果你试图找到一些非你想要的话,你不会遇到同样的麻烦。 CSS解决方法。

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      editModeEnabled: false,
    }
  }
  
  handleEditClick() {
    this.setState({ editModeEnabled: !this.state.editModeEnabled });
  }

  render() {
    return (
      <form>
        $<input type="number" value={this.props.number} disabled={!this.state.editModeEnabled}/>
        <a role="button" title="Edit" onClick={this.handleEditClick.bind(this)}>✏️</a>
      </form>
    );
  }
}

ReactDOM.render(<App number={5}/>, document.getElementById('container'));
input {
  border: 1px solid blue;
  display: inline-block;
  box-sizing: inherit;
  margin: 0;
  padding: 0;
  width: 2em;
  line-height: inherit;
  vertical-align: inherit;
  text-align: right;
  color: inherit;
  font: inherit;
  background: none;
}

input[disabled] {
  border: 0;
}

a { cursor: pointer; text-decoration: none; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="container"></div>

答案 2 :(得分:0)

您也可以使用 Bootstrap 3、Jquery 或 JQuery UI。 Bootstrap 是所有这些中最好的选择,因为互联网上有多余的材料。 您可以使用“X-Editable”。这将使您可以使该特定字段可编辑或将在输入字段上打开一个弹出窗口。 链接:https://vitalets.github.io/x-editable/