React-tags: Предупреждение о входном компоненте

Созданный на 18 сент. 2018  ·  7Комментарии  ·  Источник: i-like-robots/react-tags

У меня появляется предупреждение с использованием ReactTags :

Warning: Failed prop type: You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.
    in input (created by Input)
    in div (created by Input)
    in Input (created by ReactTags)
    in div (created by ReactTags)
    in div (created by ReactTags)

Из того, что здесь сказано, нам, вероятно, следует изменить https://github.com/i-like-robots/react-tags/blob/master/lib/Input.js#L78 примерно так:
defaultValue={query}

Что вы думаете?
Спасибо!

bug unconfirmed

Самый полезный комментарий

Я добавил PR, чтобы изменить значение defaultValue, но если вам нужен хак, который позволяет избежать предупреждения до тех пор, пока это не будет исправлено, вы можете добавить метод noop в свой класс, который использует ReactTags, и ссылаться на него как на onChange для вашего компонента. Это некрасиво, но предупреждения остановят.

noOp() {
    // does nothing
}

<ReactTags
tags={this.state.tags}
suggestions={this.state.suggestions}
handleAddition={this.handleTagAddition}
handleDelete={this.handleTagDelete}
inputAttributes={{ onChange: this.noOp }}
/>

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

У меня такая же проблема, есть предложения?

Боюсь, я сам этого не видел, не могли бы вы сообщить мне, какую версию React вы используете?

Я использую React 16.3.2

@ i-like-robots У меня тоже возникает эта проблема.

Я добавил PR, чтобы изменить значение defaultValue, но если вам нужен хак, который позволяет избежать предупреждения до тех пор, пока это не будет исправлено, вы можете добавить метод noop в свой класс, который использует ReactTags, и ссылаться на него как на onChange для вашего компонента. Это некрасиво, но предупреждения остановят.

noOp() {
    // does nothing
}

<ReactTags
tags={this.state.tags}
suggestions={this.state.suggestions}
handleAddition={this.handleTagAddition}
handleDelete={this.handleTagDelete}
inputAttributes={{ onChange: this.noOp }}
/>

Это интересный вопрос, он подробно обсуждался несколько лет назад в https://github.com/facebook/react/issues/1118 (хотя я никогда не видел этого предупреждения ни в одной из версий React, включая 16.3.2! )

В текущей реализации нет ничего технически _ неправильного_, но я согласен, что предупреждения, загромождающие консоль, раздражают, и их следует избегать.

Я не уверен, что установка defaultValue - правильное решение, так как это может иметь непредвиденные последствия (см. Https://github.com/i-like-robots/react-tags/pull/139#issuecomment-431006214 ), но потенциально есть несколько других доступных обходных путей.

Еще раз посмотрев на это, я вижу, что это предупреждение имеет 5 условий:

https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/shared/ReactControlledValuePropTypes.js#L32 -L46

Это первое условие, которое меня интересует, потому что по умолчанию это _ должно_ оцениваться как true потому что значение по умолчанию для state.query - это пустая строка. Следовательно, это должно привести к тому, что функция вернется раньше, а не выведет предупреждение.

Поэтому, чтобы вызвать это предупреждение, мне пришлось изменить состояние по умолчанию (https://github.com/i-like-robots/react-tags/blob/master/lib/ReactTags.js#L35), чтобы сделать его истинным значением.

У кого-нибудь из вас есть пример, демонстрирующий проблему, чтобы я мог рассмотреть ее более внимательно?

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