首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React Material UI onFocusOut

React Material UI onFocusOut
EN

Stack Overflow用户
提问于 2019-02-01 05:09:41
回答 2查看 9.8K关注 0票数 4

我目前使用的是

代码语言:javascript
复制
<TextField onChange={e => this.change(e, items)}

我在TextField中输入的每一个字母都会触发,因此,我输入的文本会以慢动作填充。我在想,一旦用户输入了所有内容并转移了注意力,那么这个请求就会更好。在使用React & Material UI TextField的场景中,我可以使用哪种类型的事件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-01 05:45:55

当附加任何DOM事件时,拥有函数的去抖动版本是很有用的。它将对此函数的调用次数减少到最少,从而提高了性能。

所以,你可以这样做:

代码语言:javascript
复制
import _ from 'lodash';

constructor(props) {
    super(props)

    this.onChangeDebounce = _.debounce(e => this.change(e, items), 300);
}

render() {
    ...
    onChange={e => this.onChangeDebounce(e)}
    ...
}

在本例中,我只向debounce传递了两个参数:

以毫秒为单位的rate-limited

  • The
  1. 函数,即函数被触发前的等待时间。

您可以使用onBlur事件,该事件可用于任何DOM元素。每当输入失去焦点时,就会发生onBlur事件。换句话说:当你从输入中移走光标时,它会失去“焦点”,或者变得“模糊”。

需要注意的是,它没有关联的事件,因此,为了达到您想要的效果,您可以用字段值更新状态,并在onBlur上从状态中检索此值。

在这里,您有一个fiddle来做这件事。

票数 7
EN

Stack Overflow用户

发布于 2020-07-03 03:18:42

一年半后,这里是一种当代的方法,主要用于功能组件:

作为React state.

  • Set it onChange

  • Persist (或执行任何开销较大的进程) onBlur

  • 会保留该字段的值

因此,在某种程度上,包含此文本字段的组件将如下所示:

代码语言:javascript
复制
import React, { useState } from 'react'
import { TextField } from '@material-ui/core'

const MyFunctionalComponent = () => {

  const [textFieldValue, setTextFieldValue] = useState('') 
  // ...

  return (
    <React.Fragment>
      {/** ...  */}
      <TextField
        value={textFieldValue}
        onChange={(e) => setTextFieldValue(e.target.value)}
        onBlur={() => {
          console.log(`I am blurred and ready to process ${textFieldValue}`)
        }}
      />
      {/** ... */}
    </React.Fragment>
  )
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54469273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档