javascript - 如何使用 "Enter"按钮将 State 设置为我的组件

标签 javascript reactjs ecmascript-6

我是ReactJs Es6的真正初学者,当我点击“Enter”按钮时,我试图将State设置为我的组件,我已经尝试了这里的一些答案,例如这个,https://stackoverflow.com/a/34634290/8301413 ,但它并没有按照我想要的方式工作。

到目前为止,当我在输入框中输入文本时,<h1>更改其状态并显示每个字符输入的状态。我想要发生的是,我首先输入文本,然后当我按回车键时,这是状态更新并显示输入框中文本的唯一时间。

import React, { Component } from 'react';
import ReactDOM from 'react-dom';

export class App extends Component {
  constructor(props) {
    super(props);

    this.state = { userInput: '' };
    this.handleUserInput = this.handleUserInput.bind(this);
  }

  handleUserInput(e) {
    this.setState({userInput: e.target.value});
  }

  render() {
    return (
       <div>    
          <input 
           type="text" 
           value={this.state.userInput}
           onChange={this.handleUserInput}
           />
          <h1>{this.state.userInput}</h1>
       </div>      
     );
  }
}

export default App;

最佳答案

要实现该行为,请使用 uncontrolled component ,表示不使用输入元素的 value 属性。不要使用 onChange 事件,而是使用 onKeyDown 并检查 keyCode,仅当用户按下 Enter 键时更新状态。

检查这个工作片段:

class App extends React.Component {
  constructor(props) {
    super(props);

    this.state = { userInput: '' };
    this.handleUserInput = this.handleUserInput.bind(this);
  }

  handleUserInput(e) {
    if(e.keyCode == 13)
        this.setState({userInput: e.target.value});
  }

  render() {
    return (
       <div>    
          <input 
             type="text" 
             onKeyDown={this.handleUserInput}
          />
          <h1>{this.state.userInput}</h1>
       </div>      
     );
  }
}

ReactDOM.render(<App/>, document.getElementById('app'))
<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='app'//>

关于javascript - 如何使用 "Enter"按钮将 State 设置为我的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45078345/

相关文章:

Javascript 将数字转换为文本中的超链接

css - 使用 JavaScript 动态更改 <li> 的颜色

javascript - 如果使用 axios 刷新 token 已过期,则正确重定向用户

javascript - 如何从同一对象的(箭头)函数访问对象的属性

javascript - 如何使用 v-on :change to my vue method? 传递输入文本

php - 带有服务器时间的javascript时钟

javascript - 让 Google Chrome 扩展程序仅在一个选项卡上运行

javascript - IE10 : how to branch JS for ActiveX without conditional comments?

reactjs - 从 JSX 转换为 React.createElement

javascript - 如何使用 React Router 嵌套一些路由?我想保留一个 header 组件