Как установить флажок в компоненте Material-UI React?

Судя по заголовку
Я хочу установить флажок «отмечено» по умолчанию, когда страница была полностью загружена,
но в туториале про Компонент флажка Material-UI, не было defaultChecked реквизита.
Когда я добавляю checked = {true} реквизит, то получаю стрелу например
"Компонент изменяет неконтролируемый ввод типа флажка на управляемый... и т.д."
Как мне поступить?

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

  export default class AcceptButton extends Component {
  constructor(props) {
    super(props)
    this.handleChangeEvent = this.handleChangeEvent.bind(this)
    this.state = {open: true}
  }
  handleChangeEvent = event => {
    this.setState({checked: event.target.checked})
  }
  render() {
    return (
      <Fragment>
       <div>
         group : 
       </div>
       <div className = "f-col">
       {
        group.data.map(g => {
          if (data.filter(d => d.gid == g.gid).length != 0) {
            return (
              <FormControlLabel
                key = {g.gid}
                control = {
                  <Checkbox
                    disabled = {true}
                    onChange = {this.handleChangeEvent}
                    color = "primary"
                    checked = {this.state.open}
                  />
                }
                label = {g.gname}
              />
          )}
          else {
            return (
              <FormControlLabel
                key = {g.gid}
                control = {
                  <Checkbox
                    onChange = {this.handleChangeEvent}
                    value = {g.gname}
                    color = "primary"
                  />
                }
                label = {g.gname}
              />
          )}
        })
      }
    </div> 
    <button className = "btn" onClick = {this.postassignhandle}>update</button>
  </Fragment>
)
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
21 928
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

import React from 'react';
import Checkbox from '@material-ui/core/Checkbox';

class Checkboxes extends React.Component {
  state = {
    checkedBox: true,
  };

  handleChangeEvent = name => event => {
    this.setState({ [name]: event.target.checked });
  };

  render() {
    return (
      <div>
        <Checkbox
          checked = {this.state.checkedBox}
          onChange = {this.handleChangeEvent('checkedBox')}
          value = "checkedBox"
        />
      </div>
    );
  }
}

Попробуй это.

Ответ принят как подходящий

Сделан флажок для типа карты

const checkboxstatemap = new Map()
export default class AcceptButton extends Component {
constructor(props) {
    super(props)
    this.handleChangeEvent = this.handleChangeEvent.bind(this)

    this.state = {checkboxstate: group.data.map((item) =>  checkboxstatemap.set(item.gid, true ))}
}

componentDidMount() {
handleChangeEvent = event => {
    this.setState({checked: event.target.checked})
}
render() {
    return (
    <Fragment>
    <div>
        group : 
    </div>
    <div className = "f-col">
    {
        group.data.map(g => {
        if (data.filter(d => d.gid == g.gid).length != 0) {
            return (
            <FormControlLabel
                key = {g.gid}
                control = {
                <Checkbox
                    disabled = {true}
                    onChange = {this.handleChangeEvent}
                    color = "primary"
                    checked = {this.state.checkboxstate.get(g.gid)}
                />
                }
                label = {g.gname}
            />
        )}
        else {
            return (
            <FormControlLabel
                key = {g.gid}
                control = {
                <Checkbox
                    onChange = {this.handleChangeEvent}
                    value = {g.gname}
                    color = "primary"
                />
                }
                label = {g.gname}
            />
        )}
        })
    }
    </div> 
    <button className = "btn" onClick = {this.postassignhandle}>update</button>
</Fragment>
)

Но я не могу знать, сколько флажков должно быть. Так что я думаю, установить флажок для всех состояний не может.

honeytoast 25.02.2019 07:32

@honeytoast ваше поле gid последовательное?

Shadab Ahmed 25.02.2019 11:46

Нет, это не так.

honeytoast 25.02.2019 15:18
import React, { useCallback, useState } from 'react';
import { Checkbox, FormControlLabel } from '@material-ui/core';

const defaultProps = {
    margin: 'normal',
    onChange: (e) => {}
};
const InputCheckbox = (props) => {
    const { onChange, label, value=false, name, checkedIcon, icon, className, style } = props;

    const [ isChecked, setChecked ] = useState(value);
    const _onChange = useCallback(
        (e) => {
            setChecked((value) => {
                onChange(e, { [e.target.name]: !value });
                return !value;
            });
        },
        [ onChange ]
    );
    return <FormControlLabel className = {className} style = {style} label = {label} control = {<Checkbox name = {name} icon = {icon} checkedIcon = {checkedIcon} checked = {isChecked} onChange = {_onChange} />} />;
};
InputCheckbox.defaultProps = defaultProps;
export default InputCheckbox;

используйте onChange для обратного вызова и используйте значение для инициализации

у него есть реквизит по умолчанию проверено, и вы можете использовать его как:

<Checkbox defaultChecked = {true} 
          onChange = {this.handleChangeEvent}
          color = "primary"
 />

Я пробовал это, но затем React выдает мне предупреждение: Warning: ForwardRef(SwitchBase) contains an input of type checkbox with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props.

Tommi L. 04.05.2020 13:17

@ТоммиЛ. да, верно, вероятно, когда вы используете опору defaultChecked, проверенную опору не обязательно использовать, и при использовании опор по умолчаниюChecked и проверенных одновременно есть вмешательство для React для управления флажком, поэтому вы должны удалить один из них, спасибо за ваш комментарий

Shayan Moghadam 05.05.2020 11:27

Интересно, почему эта поддержка не отображается в документации Checkbox.

AxeEffect 01.12.2020 17:14

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