
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로 클릭 변화를 핸들링한다.