通过带有事件的TextInput回调函数来响应Native iOS模拟器的高CPU使用率

aka*_*lar 5 javascript ios react-native

我遇到了一个我无法理解的奇怪问题。当我将回调分配给TextInput箭头函数并尝试使事件脱离回调时,ios模拟器开始使用大量CPU,就好像处于无限循环中一样:主线程未被阻塞,但我认为JS线程是。CPU一直高于%100,除非我退出应用程序,否则它不会掉下来。我已经在下面写下了令人反感的代码:

// LoginForm.js
render () {
  return <FormItem onFocus={this.onFocus} onBlur={this.onBlur} />
}
Run Code Online (Sandbox Code Playgroud)

部分FormItem组件的渲染方法呈现这样的:

// FormItem.js
render () {
  const { onFocus, onBlur } = this.props
  <FormInputRow
    ref={ref => (this.formInputRef = ref)}
    {...{
      onFocus,
      onBlur,
    }}
  />
}
Run Code Online (Sandbox Code Playgroud)

和部分FormInputRow组件的渲染方法是:

// FormInputRow.js
render () {
  const { onFocus, onBlur } = this.props
  return (
    <StyledTextInput
      innerRef={ref => (this.textInputRef = ref)}
      onFocus={onFocus}
      onBlur={onBlur}
    />
  )
}
Run Code Online (Sandbox Code Playgroud)

LoginForm.js没有任何问题,如果onFocusonBlur是这样定义的:

// LoginForm.js
constructor (props) {
  super(props)
  this.onFocus = this.onFocus.bind(this)
  this.onBlur = this.onBlur.bind(this)
}

onFocus () {
  console.tron.log('Focus event')
}

onBlur () {
  console.tron.log('Blur event')
}
Run Code Online (Sandbox Code Playgroud)

但是如果函数是使用event参数定义的,则如下所示:

// LoginForm.js
constructor (props) {
  super(props)
  this.onFocus = this.onFocus.bind(this)
  this.onBlur = this.onBlur.bind(this)
}

onFocus (event) {
  console.log('Focus event')
  console.log(event)
}

onBlur (event) {
  console.log('Blur event')
  console.log(event)
}
Run Code Online (Sandbox Code Playgroud)

我第一次聚焦时,CPU超过%100 TextInput。是什么原因造成的?