在React.js中的键绑定。

17 浏览
0 Comments

在React.js中的键绑定。

我正在尝试在react.js中实现按键绑定。进行了一些研究,但仍然想知道最简洁的方法是什么。例如,\n

如果(event.keyCode == 13 /*回车*/) {
  函数()
}
如果(event.keyCode == 27 /*ESC*/) {
  另一个函数()
}

0
0 Comments

在上面的代码中,有一个搜索组件,其中的onSearch函数用于实现按下ESC键清除输入框内容并取消输入框焦点的功能。然而,代码中并没有使用键盘绑定来实现这个功能。

因此,我们需要为搜索组件添加键盘绑定来解决这个问题。我们可以使用React的onKeyDown属性来监听键盘按键事件,并通过判断keyCode是否为27来判断是否按下了ESC键。如果按下了ESC键,我们可以通过设置event.target.value为空来清除输入框的内容,并通过this.refs.input.blur()取消输入框的焦点。如果没有按下ESC键,我们可以通过this.refs.input.focus()将输入框设置为焦点状态。

下面是添加键盘绑定后的修改后的代码:

import React from "react"
import _debounce from "lodash.debounce"
import "./stylesheets/search"
export default class Search extends React.Component {
  displayName = "Search"
  static propTypes = {
    bucketName: React.PropTypes.string,
    placeholder: React.PropTypes.string,
    onSearchUpdated: React.PropTypes.func,
  }
  state = {
    search: "",
    placeholder: "Search",
    bucketName: "",
  }
  componentWillMount() {
    this.delayedCallback = _debounce((event) => {
      let search = event.target.value
      this.setState({
        search,
      })
      this.props.onSearchUpdated(search, this.props.bucketName)
    })
  }
  onSearch = (event) => {
    if (event.keyCode === 27) {
      event.target.value = ''
      this.refs.input.blur()
    } else {
      this.refs.input.focus()
    }
    event.persist()
    this.delayedCallback(event)
  }
  render() {
    return (
      
) } }

通过以上的修改,我们为搜索组件添加了键盘绑定,使得按下ESC键时能够清除输入框内容并取消输入框焦点。现在,我们可以通过在键盘事件中判断keyCode来实现这个功能了。

0
0 Comments

在React.js中,需要使用键绑定来处理特定按键的事件。下面是一个示例,展示了如何在React.js中使用键绑定来处理按下回车键的事件。

首先,在构造函数中定义键绑定的处理函数。使用this.handleEnterKeyPress.bind(this)将处理函数绑定到组件实例。

  constructor(props) {
    super(props);
    this.state = {        
    }
    this.handleEnterKeyPress = this.handleEnterKeyPress.bind(this)
  }

接下来,在render方法中使用onKeyPress属性将处理函数与输入框关联起来。当按下键盘上的任意键时,都会调用处理函数。

  render() {   
    return (             
      <input className ="pageText" type="text" value= "value" onKeyPress = {this.handleEnterKeyPress} />                       
    )
  }

最后,在类中编写相应的处理函数。在这个例子中,处理函数会检查按下的键是否是回车键(charCode为13),如果是,则执行相应的代码。

  handleEnterKeyPress(e) {
    if (e.charCode == 13) {
      // your code
    }
  }

通过这样的设置,当用户在输入框中按下回车键时,会触发handleEnterKeyPress函数,并且可以在函数内部执行相应的操作。

0
0 Comments

在上述代码中,作者使用了jQuery来绑定和解绑keydown事件。这是因为在组件挂载和卸载时,分别调用了componentDidMount和componentWillUnmount生命周期方法,并在这两个方法中使用了jQuery的on和off方法来绑定和解绑keydown事件。handleKeyDown方法用于处理键盘按下事件,当按下enter键时,调用okAction方法,当按下esc键时,调用cancelAction方法。

作者在代码中提到了可能有更好的方法来处理这个问题。在这个对话框组件中,这个函数被用作组件的一部分。作者建议可以使用箭头函数来自动绑定handleKeyDown,或者在构造函数中设置bind来绑定handleKeyDown。

根据作者的建议,我们可以使用箭头函数来自动绑定handleKeyDown方法。修改代码如下:

handleKeyDown = (event) => {
  if (event.keyCode == 13 /*enter*/) {
    this.okAction();
  }
  if (event.keyCode == 27 /*esc*/) {
    this.cancelAction();
  }
}

在这个修改后的代码中,我们使用箭头函数来定义handleKeyDown方法,这样就不需要手动绑定this了。这种方式更加简洁和直观。

另外,我们也可以在构造函数中使用bind来绑定handleKeyDown方法,修改代码如下:

constructor(props) {
  super(props);
  this.handleKeyDown = this.handleKeyDown.bind(this);
}

在这个修改后的代码中,我们在构造函数中使用bind方法来手动绑定handleKeyDown方法的this,这样就不需要使用jQuery来进行事件绑定和解绑了。

总结起来,使用箭头函数或者在构造函数中使用bind方法来绑定handleKeyDown方法都是更好的解决方法,而不是使用jQuery来进行事件绑定和解绑。这样可以使代码更加简洁和易读,同时也避免了对第三方库的依赖。

0