728x90
반응형
질문 : 구성 요소가 ReactJS에서 제어 할 텍스트 유형의 제어되지 않은 입력을 변경하고 있습니다.
경고 : 구성 요소가 제어 할 텍스트 유형의 제어되지 않은 입력을 변경하고 있습니다. 입력 요소는 제어되지 않음에서 제어 됨으로 (또는 그 반대로) 전환되지 않아야합니다. 구성 요소의 수명 동안 제어되거나 제어되지 않은 입력 요소를 사용할지 여부를 결정합니다. *
다음은 내 코드입니다.
constructor(props) {
super(props);
this.state = {
fields: {},
errors: {}
}
this.onSubmit = this.onSubmit.bind(this);
}
....
onChange(field, e){
let fields = this.state.fields;
fields[field] = e.target.value;
this.setState({fields});
}
....
render() {
return(
<div className="form-group">
<input
value={this.state.fields["name"]}
onChange={this.onChange.bind(this, "name")}
className="form-control"
type="text"
refs="name"
placeholder="Name *"
/>
<span style={{color: "red"}}>{this.state.errors["name"]}</span>
</div>
)
}
답변
그 이유는 다음과 같이 정의한 상태입니다.
this.state = { fields: {} }
필드를 빈 개체로 사용하므로 처음 렌더링하는 동안 this.state.fields.name
은 undefined
이고 입력 필드의 값은 다음과 같습니다.
value={undefined}
이로 인해 입력 필드가 제어되지 않습니다.
입력에 값을 입력하면 fields
가 다음과 같이 변경됩니다.
this.state = { fields: {name: 'xyz'} }
그리고 그 때 입력 필드는 제어 된 구성 요소로 변환됩니다. 그래서 오류가 발생합니다.
구성 요소가 제어 할 텍스트 유형의 제어되지 않은 입력을 변경하고 있습니다.
가능한 해결책:
fields
를 다음과 같이 정의하십시오.
this.state = { fields: {name: ''} }
2- 또는 다음과 같이 단락 평가 를 사용하여 값 속성을 정의합니다.
value={this.state.fields.name || ''} // (undefined || '') = ''
출처 : https://stackoverflow.com/questions/47012169/a-component-is-changing-an-uncontrolled-input-of-type-text-to-be-controlled-erro
728x90
반응형
'프로그래밍 언어 > HTML,CSS,JS' 카테고리의 다른 글
CSS에서 px 또는 rem 중에 무엇을 사용해야 할까? (0) | 2021.08.03 |
---|---|
텍스트 선택 강조 표시를 비활성화하는 방법 (0) | 2021.08.03 |
HTML5 로컬 저장소와 세션 저장소 (0) | 2021.08.03 |
CSS 표시 속성의 전환 (0) | 2021.08.03 |
CSS에서 테두리 불투명도를 설정하는 방법 (0) | 2021.08.03 |