기본값을 설정하는 방법 ReactJS 체크 박스?


169

checked="checked"React에서 기본값으로 할당 된 확인란 상태를 업데이트하는 데 문제가 있습니다.

var rCheck = React.createElement('input',
                                 {type: 'checkbox', checked:'checked', value: true},
                                 'Check here');

을 (를) 할당 한 후 checked="checked"클릭 / 확인 해제를 클릭하여 확인란 상태를 상호 작용할 수 없습니다.


6
facebook.github.io/react/docs/forms.html 제어되는 구성 요소와 제어되지 않는 구성 요소의 차이점을 확인하십시오.
— zerkms

답변:


235

상자와 상호 작용하려면 일단 변경 한 확인란의 상태를 업데이트해야합니다. 기본 설정을 사용하려면을 사용할 수 있습니다 defaultChecked.

예를 들면 :

<input type="checkbox" defaultChecked={this.state.chkbox} onChange={this.handleChangeChk} />

그러나 INPUT을 클래스로 만들지 않고 React.createElement로 만듭니다. 그래서, 기본값을 설정하는 방법
— Yarin Nim

6
@YarinNim render위의 <input>요소 와 함께 사용할 수 있습니다 . 는 defaultChecked같은 PARAM로서 제공 될 수 checked있다.
— nitishagar

71

이를 수행하는 몇 가지 방법이 있습니다. 몇 가지가 있습니다.

상태 후크를 사용하여 작성 :

function Checkbox() {
  const [checked, setChecked] = React.useState(true);

  return (
    <label>
      <input type="checkbox"
        checked={checked}
        onChange={() => setChecked(!checked)}
      />
      Check Me!
    </label>
  );
}

ReactDOM.render(
  <Checkbox />,
  document.getElementById('checkbox'),
);

다음은 JSBin 의 라이브 데모입니다 .

구성 요소를 사용하여 작성 :

class Checkbox extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      isChecked: true,
    };
  }
  toggleChange = () => {
    this.setState({
      isChecked: !this.state.isChecked,
    });
  }
  render() {
    return (
      <label>
        <input type="checkbox"
          checked={this.state.isChecked}
          onChange={this.toggleChange}
        />
        Check Me!
      </label>
    );
  }
}

ReactDOM.render(
  <Checkbox />,
  document.getElementById('checkbox'),
);

다음은 JSBin 의 라이브 데모입니다 .


3
상태가 가득! 무국적 접근은 어떻습니까?
— Green

53

확인란만으로 만든 경우 React.createElement속성 defaultChecked이 사용됩니다.

React.createElement('input',{type: 'checkbox', defaultChecked: false});

@nash_ag에 신용


4
이것은 당신이 (클래스 => className) 및 (for => htmlFor)와 같은 일반 html 태그와 함께 defaultChecked를 사용할 수있는 것과는 다릅니다 ...
— Fareed Alnamrouti

31

React 렌더링 수명주기에서 양식 요소의 value 속성은 DOM의 값보다 우선합니다. 제어되지 않은 구성 요소를 사용하면 React에서 초기 값을 지정하지만 후속 업데이트는 제어하지 않는 경우가 종종 있습니다. 이 경우를 처리하기 위해 값 대신 defaultValue 또는 defaultChecked 속성을 지정할 수 있습니다.

        <input
          type="checkbox"
          defaultChecked={true}
        />

또는

React.createElement('input',{type: 'checkbox', defaultChecked: true});

defaultChecked아래 확인란 에 대한 자세한 내용은 https://reactjs.org/docs/uncontrolled-components.html#default-values를 확인하십시오.


1
checked 파라미터를 직접 사용하면 체크를 해제 할 수 없습니다. 이 defaultChecked 매개 변수를 사용해야합니다. 감사.
— kodmanyagha

12

정답 외에도 다음과 같이 할 수 있습니다. : P

<input name="remember" type="checkbox" defaultChecked/>

1
이것이 대부분의 사람들이 찾는 것이므로 허용되는 답이어야합니다 checked. 기본 HTML의 대안 .
— Bram Vanroy '

4

작동합니다

<input type="checkbox" value={props.key} defaultChecked={props.checked} ref={props.key} onChange={this.checkboxHandler} />

그리고 그것을 초기화하십시오

{this.viewCheckbox({ key: 'yourKey', text: 'yourText', checked: this.state.yourKey })}

3

"true"또는 ""를 입력 확인란의 checked 속성으로 전달할 수 있습니다. 빈 따옴표 ( "")는 거짓으로 이해되며 항목은 선택 해제됩니다.

let checked = variable === value ? "true" : "";
<input
     className="form-check-input"
    type="checkbox"
    value={variable}
    id={variable}
    name={variable}
    checked={checked}
/>
<label className="form-check-label">{variable}</label>

점검 중단되었습니다
— Mbanda

@Mbanda 자세한 정보를 제공하기위한 문서를 제공 할 수 있습니까
— Brad

이러면 안됩니다. 문자열을 "checked"속성에 전달하면 "경고 : true부울 속성에 대한 문자열 을 수신했습니다checked
— paul.ago

1

제 경우에는 "defaultChecked"가 상태 / 조건에서 제대로 작동하지 않는다고 생각했습니다. 따라서 상태를 전환하기 위해 "onChange"와 함께 "checked"를 사용했습니다.

예 :

checked={this.state.enabled} onChange={this.setState({enabled : !this.state.enabled})}

0

얼마 전에 내가 한 코드가 있습니다. 유용 할 수 있습니다. 이 줄을 가지고 놀아야합니다 => this.state = {checked : false, checked2 : true};

class Componente extends React.Component {
  constructor(props) {
    super(props);

    this.state = { checked: false, checked2: true};
    this.handleChange = this.handleChange.bind(this);
    this.handleChange2 = this.handleChange2.bind(this);

  }  

  handleChange() {
    this.setState({
        checked: !this.state.checked      
    })
  }

  handleChange2() {
    this.setState({
        checked2: !this.state.checked2      
    })
  }

  render() {
    const togglecheck1 = this.state.checked ? 'hidden-check1' : '';
    const togglecheck2 = this.state.checked2 ? 'hidden-check2' : '';

    return <div>
        <div>
        <label>Check 1</label>
        <input type="checkbox" id="chk1"className="chk11" checked={ this.state.checked } onChange={ this.handleChange } />
        <label>Check 2</label>
        <input type="checkbox" id="chk2" className="chk22" checked={ this.state.checked2 } onChange={ this.handleChange2 } />
      </div>

      <div className={ togglecheck1 }>show hide div with check 1</div>
      <div className={ togglecheck2 }>show hide div with check 2</div>

    </div>;
  }
}

ReactDOM.render(
  <Componente />,
  document.getElementById('container')
);

CSS

.hidden-check1 {
  display: none;  
  }

.hidden-check2 {
  visibility: hidden;
}

HTML

  <div id="container">
      <!-- This element's contents will be replaced with your component. -->
  </div>

여기 코드 펜이 있습니다 => http://codepen.io/parlop/pen/EKmaWM


또 다른 ... 이것은 상태 전체 접근입니다! 무국적자는 어떻습니까?
— Green

그린, 무슨 뜻이야?
— omarojo

0

너무 어렵게 만들지 마십시오. 먼저 아래 주어진 간단한 예를 이해하십시오. 당신에게 분명합니다. 이 경우 확인란을 누른 직후 상태에서 값을 가져오고 (초기 거짓) 다른 값으로 변경하고 (초기에는 참) 상태를 적절하게 설정합니다. 이 확인란을 두 번 누르면 동일한 과정을 다시 수행합니다. 값을 가져 와서 (현재는 true), 값을 false로 변경 한 다음 상태를 적절하게 설정하십시오 (이제 다시 false입니다. 코드는 아래에서 공유됩니다.

1 부

state = {
  verified: false
} // The verified state is now false

2 부

verifiedChange = e => {
  // e.preventDefault(); It's not needed
  const { verified } = e.target;
  this.setState({
    verified: !this.state.verified // It will make the default state value(false) at Part 1 to true 
  });
}; 

3 부

  <form> 
      <input
          type="checkbox"
          name="verified"
          id="verified"
          onChange={this.verifiedChange} // Triggers the function in the Part 2
          value={this.state.verified}
      />
      <label for="verified">
      <small>Verified</small>
      </label>
  </form>

0

이것은 순수한 js로 수행 할 수 있습니다

              <Form.Group controlId="categoryStatus">
                <Form.Check
                  type="checkbox"
                  label="Category Status Active/In-active"
                  onChange={this.handleChecked}                 
                />
              </Form.Group>
  //Load category to form : to edit
  GetCategoryById(id) {
    this.UpdateId = id
    axios.get('http://localhost:4000/Category/edit/' + id)
      .then(response => {
        this.setState({
          category_name: response.data.category_name,
          category_description: response.data.category_description,
          is_active: response.data.is_active,
        });

        response.data.is_active == 1 ? document.getElementById("categoryStatus").checked = true : document.getElementById("categoryStatus").checked = false;
      })
      .catch(function (error) {
        console.log(error);
      })
  }


-2
 <div className="form-group">
          <div className="checkbox">
            <label><input type="checkbox" value="" onChange={this.handleInputChange.bind(this)}  />Flagged</label>
            <br />
            <label><input type="checkbox" value=""  />Un Flagged</label>
          </div>
        </div

handleInputChange (event) {

console.log("event",event.target.checked)   }

위의 핸들은 확인되거나 확인되지 않은 경우 true 또는 false 값을 제공합니다


-2

상태를 any [] 유형으로 설정했습니다. 생성자에서 상태를 null로 설정합니다.

onServiceChange = (e) => {
    const {value} = e.target;
    const index = this.state.services.indexOf(value);
    const services = this.state.services.filter(item => item !== value);
    this.setState(prevState => ({
        services: index === -1 ? prevState.services.push(value) && prevState.services : this.state.services.filter(item => item !== value)
    }))
}

입력 요소에서

this.onServiceChange (e)} /> this.onServiceChange (e)} /> this.onServiceChange (e)} /> this.onServiceChange (e)} />

나는 얼마 후 그것을 알아 냈습니다. 그것은 당신에게 도움이 될 수 있다고 생각했습니다 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.