import React from 'react';
const ToggleButton = ({ checked, handleToggle }) => {
return (
<label className="toggle">
<input type="checkbox" checked={checked} onClick={handleToggle} />
// ...중략
</label>
);
};
export default ToggleButton;
프로젝트 중 체크 박스를 구현하다가 다음과 같은 에러를 맞이 했다.
Warning: Failed prop type: You provided a checked prop to a form field without an onChange handler. This will render a read-only field. If the field should be mutable use defaultChecked. Otherwise, set either onChange or readOnly.
글을 해석해보자면
checked
props가 onChange
없이 사용되었다.defaultChecked
를 사용해라onChange
나 readOnly
(읽기 전용) 으로 설정해라.defaultChecked
는 form을 state
로 관리하지 않을 때 사용하는 것을 권장한다. defaultChecked
는 onChange
값과 관계없이 checked
값을 변경할 수 있다.나는 state로 이 값을 관리하고 싶기 때문에 defaultChecked를 사용하지 않기로 했다.
checked
를 사용하는 것을 선택했기 때문에 onClick
을 사용하지 못한다.onChange
를 사용하면되는데, 구현코드는 아래와 같이 onClick
을 onChange
로만 변경하면 된다.import React from 'react';
const ToggleButton = ({ checked, handleToggle }) => {
return (
<label className="toggle-button">
<input type="checkbox" checked={checked} onChange={handleToggle} />
// ...중략
</label>
);
};
export default ToggleButton;
나의 구현 방법
state
로 Check 여부를 추적하면서 input에서는 checked
로 변화를 감지한다.onChange
로 클릭 변화를 핸들링한다.