React-tags: Очистка ввода при размытии

Созданный на 14 янв. 2020  ·  5Комментарии  ·  Источник: i-like-robots/react-tags

Было бы неплохо, если бы был способ очистить ввод при размытии.

Это можно было бы сделать, если бы мы могли передать ссылку на вход или через новую опору, похожую на clearInputOnDelete.

Причина моего использования заключается в том, что если я передаю фиксированный набор предложений, и пользователь вводит что-то, что не соответствует предложению, затем они снимают фокус с ввода, тогда это похоже на то, что их ввод был действительным и будет хранится. Я хочу, чтобы было ясно, что любой несоответствующий текстовый ввод не будет сохранен.

question

Все 5 Комментарий

Вы смотрели на использование v6 этого компонента?

https://github.com/i-like-robots/react-tags/tree/6.0

Эта версия имеет как onBlur обратного вызова и .clearInput() метод 😄

Отлично! Решает это за меня 🙂

@ i-like-robots Извините, что снова комментирую это, но мне неясно, как получить доступ к методу clearInput() поскольку в пакете нет ссылки? Обычно я бы использовал что-то вроде this.reactTagsRef.current.clearInput() для доступа к подобному дочернему методу.

Добавьте ref в свой экземпляр компонента, используя пример из этого репо и расширив его с помощью обратного вызова onBlur :

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

    this.state = {
      tags: [],
      suggestions: []
    }

+   this.reactTags = React.createRef()
  }

  onDelete (i) {
    const tags = this.state.tags.slice(0)
    tags.splice(i, 1)
    this.setState({ tags })
  }

  onAddition (tag) {
    const tags = [].concat(this.state.tags, tag)
    this.setState({ tags })
  }

+ onBlur () {
+   if (this.reactTags.current) {
+     this.reactTags.current.clearInput()
+   }
+ }

  render () {
    return (
        <ReactTags
+         ref={this.reactTags}
          tags={this.state.tags}
          suggestions={this.state.suggestions}
+         onBlur={this.onBlur.bind(this)}
          onDelete={this.onDelete.bind(this)}
          onAddition={this.onAddition.bind(this)}
        />
    )
  }
}

Отлично, спасибо!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги