Следует ли игнорировать предупреждение React: элементы ввода не должны переключаться с неконтролируемых на контролируемые?

Код ошибки

Предупреждение: компонент изменяет неконтролируемый ввод типа time, которым нужно управлять. Элементы ввода не должны переключаться с неконтролируемого на управляемый (или наоборот). Выберите между использованием контролируемого или неконтролируемого элемента ввода на протяжении всего срока службы компонента.

Описание

Итак, у меня есть компонент, который динамически отображает несколько полей ввода на основе элементов в массиве. Мой массив содержит 7 дней, и я зацикливаю несколько полей ввода для каждого дня. Также есть действие для каждого из этих полей ввода. Нажимая кнопку, я могу выбрать, должны ли некоторые поля ввода иметь одинаковое или разное содержимое. Каждое из этих полей ввода также должно иметь уникальное состояние. Итак, я создаю пустое состояние вроде этого:

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

И создайте его внутри моего цикла вот так:

() => this.setState({ ['show' + day + '_morning'] : true })
() => this.setState({ ['show' + day + '_afternoon'] : true })

Хотя я мог предопределить каждое из этих состояний как «showMonday_morning» и т. д., Я попытался избежать этого, потому что я хочу научиться создавать состояния динамически в циклах для дальнейшего использования.

Все работает отлично, но я получаю код ошибки сверху.

Вопрос

Могу ли я отнестись к этой ошибке легкомысленно или ее нужно решить? Если ее необходимо решить, как я могу динамически создавать и добавлять состояния внутри цикла и избегать этой ошибки?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
567
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Насколько я знаю, React.js говорит вам принять решение об использовании одного типа элементов ввода, контролируемых или неконтролируемых, если у вас есть оба из них в компоненте, вы увидите это предупреждение, я предлагаю создать собственный компонент InputComponent. где вы можете использовать его в своем приложении React.

Это предупреждение не считается опасным, оно предназначено для более чистого реагирования и оптимизации.

Спасибо за разъяснения! Я также предпочитаю иметь чистое приложение без ошибок, так что это помогает!

Cédric Bloem 06.12.2018 08:50

посмотрите на это medium.com/myheritage-engineering/…: +1: удачи

Sultan H. 06.12.2018 09:09

Очень интересная статья! Думаю, я немного это понимаю; однако я все еще придерживаюсь своего кода и не вижу другого выхода, кроме как задать новый вопрос, связанный с ним: stackoverflow.com/questions/53648933/….

Cédric Bloem 06.12.2018 11:12
Ответ принят как подходящий

Вам не нужно динамически создавать состояние в конструкторе. Скорее вы можете просто условно использовать его при рендеринге.

<input value = {this.state.['showSatMorning'] || ''} />

Can I take this error lightly or should this be solved?

Хотя это предупреждение не повлияет ни на что в вашем приложении, но лучше обрабатывать такие предупреждения, чтобы ваше приложение было согласованным и избегало неожиданных проблем.

Спасибо за разъяснения! Я также предпочитаю иметь чистое приложение без ошибок, так что это помогает!

Cédric Bloem 06.12.2018 08:49

Могу я получить вашу электронную почту @Shubham Khatri

Pie 07.12.2018 11:36

@Pie Вы можете связаться со мной в LinkedIn или написать мне в Twitter, и я отправлю вам свой электронный адрес.

Shubham Khatri 07.12.2018 14:06

@ShubhamKhatri Я уже отправил DM в твиттере. Запрос на электронную почту

Pie 07.12.2018 19:16

Другие вопросы по теме