Флажок пользовательского интерфейса материала не включается и не выключается

#javascript #reactjs #material-ui

Вопрос:

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

 const createCheckBox = (row, checkBoxStatus, changeStatus) =gt; {  let text = "";  if (row.values.map((value, index) =gt; {  text  = value.title  }))  if (text) {  return (  lt;Checkbox checked /gt;  )  } else {  return (  lt;Checkbox checked={false} disabled /gt;  )  } }  

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

Странно то, что если я удалю checked из истинной части кода, я смогу установить флажок, но не смогу, когда я его установлю.

Комментарии:

1. Вы получаете какие-либо ошибки? Если да, добавьте их сюда. Попробуйте проверить длину текста в вашем заявлении if. if(text.length gt; 0)

2. @SebastianGbudje без ошибок. У меня в данный момент текст жестко закодирован, поэтому я знаю, каковы значения. Там нет нулевых значений или пустых строк в text

3. checked является правдивой опорой, поэтому флажок «застрял» установлен и checked={false} делает его «застрявшим» непроверенным. Ничто не поддается переключению. Почему вы устанавливаете 2 флажка и условно устанавливаете один или другой?

4. @DrewReese, это имеет смысл. В основном я пытаюсь отобразить только 1 флажок, но они должны отображаться на основе того, имеет ли текст значение или нет.

5. И checked={!!text} что ?

Ответ №1:

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

Вот что у меня есть.

Я поставил этому истинное условие

 lt;Checkbox defaultChecked /gt;  

Но потом это дало мне эту ошибку.

MUI: Компонент изменяет проверенное по умолчанию состояние неконтролируемой базы коммутаторов после инициализации. Чтобы подавить это предупреждение, выберите управляемую коммутационную базу.

Только для того, чтобы он давал, поэтому я поменял флажок на этот.

 lt;Checkbox value={row.name   "_checkbox"} defaultChecked /gt;  

Затем это дало мне некоторую ошибку о том, что у меня нет ключа, поэтому я добавил ключ в флажок

 lt;Checkbox key={row.name   "_checkbox_key"} value={row.name   "_checkbox"} defaultChecked /gt;  

Теперь все работает так, как я хотел.