어떻게 상호작용 표를 만듭니까
뚜렷하고 지능적인 좋은 폼 디자인은 사용자가 그들의 목표를 신속하게 실현하도록 도와줄 수 있다.반면 디자인이 엉망인 폼은 혼란을 초래하고 사용자와 응용 프로그램의 상호작용을 막을 수도 있다.
따라서, 우리는 좋은 폼이 당신의 응용 프로그램에 유리하고 사용자를 만족시킬 수 있다는 것에 동의합니다.그러나 좋은 폼의 수요를 실현하려면 반응을 하기 어려울 것 같다. 동적 폼, 실시간 응답 피드백, 그리고 좋은 사용자 체험을 만드는 것이다.우리는 어떻게
components
, states
와 props
의 토지에서 이러한 요구를 만족시킬 수 있습니까?우리가 얻을 수 있는 첫 번째 힌트는 당연히 표에 관한 React 문서이다.
handleChange = e => {
this.setState({ value: e.target.value })
}
// ...
<input
onChange={this.handleChange}
value={this.state.value}
/>
이것은 기본적으로 React 양식 문서의 요약입니다.이것은 단지 React가 사용자가 클릭하거나 키를 눌렀을 때 사용해야 할 방식을 알려줄 뿐이다.React는 사용자의 값을 state로 설정한 다음 이 상태를 입력 값으로 사용합니다.끝났어.응?이렇게?
네.복잡한 업무 논리를 가진 응용 프로그램을 위해 폼을 구축할 때 직면하게 될 다른 문제들그래, 네가 결정해라.즐겨하다
component
,state
,props
퍼즐처럼 우리는 스스로 그것들을 조합해야 한다.이 자습서의 최종 제품은 다음과 같습니다.
React를 사용하여 양식을 만들 때는 다음 세 가지 기본 원칙을 기억해야 합니다.
component
폼 요소를 나타내는 데 사용되며 보통 JSX 요소state
사용자 입력 추적용props
데이터를 JSX 요소에 전달하는 데 사용기본 반응 형식
React의 모든 내용은 하나의 구성 요소입니다. 폼을 포함하고, React
state
는 입력 값을 추적하는 데 사용됩니다.다음은 React로 작성된 예제 양식입니다.class BasicForm extends Component {
constructor(props) {
super(props);
this.state = {
name:'',
email: '',
};
}
handleNameChange = (event) => {
this.setState({name: event.target.value});
}
handleEmailChange = (event) => {
this.setState({email: event.target.value});
}
handleSubmit = (event) => {
event.preventDefault();
const { name, email } = this.state
alert(`Your state values: \n
name: ${name} \n
email: ${email}`)
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<div className="form-group">
<label htmlFor="name">Name</label>
<input name="name" className="form-control" id="name" placeholder="Enter name" value={this.state.name} onChange={this.handleNameChange} />
</div>
<div className="form-group">
<label htmlFor="email">Email</label>
<input name="email" className="form-control" id="email" placeholder="Enter email" value={this.state.email} onChange={this.handleEmailChange} />
</div>
<button type="submit" className="btn btn-success btn-block">Submit</button>
</form>
);
}
}
와!이 코드는 무엇을 합니까?걱정하지 마, 코드가 사람을 물지 않을 거야!이제 설명해 드릴게요.
우리는
state
부터 시작할 것이다.react 폼은 필드 값의 유일한 진가 원본으로 state
를 사용합니다.이것은 표input
의 각component
요소가 state
값으로 그 값을 한다는 것을 의미한다.this.state = {
name:'',
email: '',
};
그리고 상태 값을 input
표시value
prop
에 분배합니다.입력 값을 변경할 때마다 실행되는 onChange
prop
도 추가했습니다.마지막으로, 우리는 onSubmit
도구를 폼 구성 요소에 추가하여 제출을 처리하는 데 사용합니다.render() {
return (
<form onSubmit={this.handleSubmit}>
<div className="form-group">
<label htmlFor="name">Name</label>
<input name="name" className="form-control" id="name" placeholder="Enter name"
// value and onChange prop
value={this.state.name}
onChange={this.handleNameChange} />
</div>
<div className="form-group">
<label htmlFor="email">Email</label>
<input name="email" className="form-control" id="email" placeholder="Enter email"
// value and onChange prop
value={this.state.email}
onChange={this.handleEmailChange} />
</div>
<button type="submit" className="btn btn-success btn-block">Submit</button>
</form>
);
}
다음에 우리는 handleChange
방법을 추가할 수 있는데 이 방법은 event
파라미터를 받아들일 수 있다.이 이벤트 대상은 우리의 입력 이름과 값을 저장할 것입니다.handleNameChange = (event) => {
this.setState({name: event.target.value});
}
handleEmailChange = (event) => {
this.setState({email: event.target.value});
}
표 구조의 마지막 부분은submit handler 방법이다.이 예에서 우리는 handleSubmit
방법을 사용했는데, 이 방법은 경보 상자를 호출하면 상태 값을 출력할 수 있다.handleSubmit = (event) => {
event.preventDefault();
const { name, email } = this.state
alert(`Your state values: \n
name: ${name} \n
email: ${email}`)
}
일반적인 HTML 양식과 마찬가지로 데이터를 저장하거나 전송하는 작업을 수행하고 처리하는 곳입니다.JavaScript 코드를 사용하여 커밋을 처리하므로 커밋 방법에 event.preventDefault()
를 추가해야 합니다.브라우저의 JavaScript 탐지기가 수신 양식으로 이벤트를 전송하도록 설정되어 있기 때문에 일반적으로 이 이벤트는 페이지를 다시 로드하도록 트리거합니다.이 preventDefault
를 사용하면 브라우저에 기본 방법을 사용하지 말라고 알려 줍니다.이렇게 하면 페이지를 다시 불러오는 것이 멈추고 제출 방법이 실행될 수 있습니다.검증을 진행하다
데이터를 검증하는 전통적인 방법은 폼을 제출하고 서버가 검증을 마칠 때까지 기다린 다음에 웹 페이지가 새로 고쳐지고 오류 메시지가 표시됩니다.이 과정은 사용자에게 시간과 번거로움을 소모한다.
React는 전방 라이브러리이기 때문에, 폼 구성 요소에 실시간 검증을 구축해서 이 문제를 해결할 수 있습니다.사실 이것은 React 응용 프로그램에서 흔히 볼 수 있는 모델로 내가 보기에 매우 좋다.
React는 모든 폼 데이터를 상태에 저장하기 때문에
render
이전에 검사를 할 수 있습니다. 데이터가 잘못되면 오류 메시지를 표시할 수 있습니다.예를 들어, 이름 길이가 3자 이상인지 확인하려면 다음을 사용할 수 있습니다.render(){
const isValidName = this.state.name.length > 3
const isValidEmail = this.state.email.length > 3
}
그런 다음 컨텍스트에 배치합니다.// the render method
render() {
const isValidName = this.state.name.length > 3;
const isValidEmail = this.state.email.length > 3;
return (
<form onSubmit={this.handleSubmit}>
<div className="form-group">
<label htmlFor="name">Name</label>
<input
name="name"
className={`form-control ${ isValidName? '':'is-invalid' }`}
id="name"
placeholder="Enter name"
value={this.state.name}
onChange={this.handleNameChange}
/>
{/*feedback here*/}
{ isValidName? null: <div className='invalid-feedback'>Name must be longer than 3 characters</div> }
</div>
<div className="form-group">
{/*after email input*/}
{ isValidEmail? null: <div className='invalid-feedback'>Email must be longer than 3 characters</div> }
</div>
<button type="submit" className="btn btn-success btn-block">
Submit
</button>
</form>
);
}
폼은 즉시 검증되며, 이름이 3글자를 넘으면 오류 메시지가 사라집니다.그러나 이런 검증이 가장 좋은 것은 아니다. 왜냐하면 우리는 검증 논리를 렌더 방법에 두기 때문이다. 우리가 대량의 데이터를 검증할 때 렌더 방법은 곧 이 방법을 스파게티 국수로 바꿀 것이다.심지어 우리가 텍스트 상자를 사용하기 전에도 실행될 것이다.그것은 좋지 않다.상태를 사용하여 버그 체크
우리가 상태를 사용하여 데이터를 입력하는 것과 같이, 우리도 상태를 사용하여 검증할 수 있다.상태 초기화에 새 상태 속성을 추가합니다.
this.state = {
name: '',
email: '',
nameError: '',
emailError: ''
}
formError
상태는 오류 메시지를 유지합니다. 오류 메시지를 표시하기 위해 사용할 것입니다.새 유효성 검사 함수를 작성하여 컨텍스트에 배치합니다.handleNameChange = event => {
this.setState({ name: event.target.value }, () => {
this.validateName();
});
};
handleEmailChange = event => {
this.setState({ email: event.target.value }, () => {
this.validateEmail();
});
};
validateName = () => {
const { name } = this.state;
this.setState({
nameError:
name.length > 3 ? null : 'Name must be longer than 3 characters'
});
}
validateEmail = () => {
const { email } = this.state;
this.setState({
emailError:
email.length > 3 ? null : 'Email must be longer than 3 characters'
});
}
이렇게 하면 사용자가 입력에 내용을 입력할 때만 검증 방법이 실행됩니다.현재 우리가 해야 할 마지막 일은 사용자가 텍스트 상자를 눌렀을 때 검증을 실행한 다음 다른 텍스트 상자를 눌렀을 때 아무런 조작도 하지 않고 이동하는 것이다.onBlur 추가
입력 요소에
onBlur
아이템을 추가합니다.<input
name='name'
// className, id, onChange ...
onBlur={this.validateName}
/>
<input
name='email'
// className, id, onChange ...
onBlur={this.validateEmail}
/>
현재, 검증 방법은 사용자가 터치한 해당 texbox에서 실행되고 오류 메시지를 표시합니다.다음은 데모입니다.
결론
이제 우리가 이 간단한 예에서 배운 것을 총결해 볼 때가 되었다.React form의 세 가지 기본 원칙을 다시 한번 반복해 보겠습니다.
component
폼 요소를 나타내는 데 사용되며 보통 JSX 요소state
사용자 입력 추적용props
데이터를 JSX 요소에 전달하는 데 사용component
를 작성하여 우리의 JSX 표를 보여 주었다.우리는 state
를 사용하여 name
와 email
의 값을 추적하고props를 사용하여 데이터를 상태값에서 입력값으로 전달한다. handleChange
함수를 onChange
props로 전달하는 것을 포함한다.React에서 데이터를 처리하는 방식에 익숙하지 않은 사람들에게 React에서 폼을 생성하는 것은 상당히 복잡한 작업이다.React 폼에 대한 고급 안내서가 필요하시면, Arnich의high quality React form tutorials 를 보십시오.그것은 너를 도와 많은 시간을 절약할 수 있다.
읽어주셔서 감사합니다!만약 네가 이런 문장을 좋아한다면 반드시 나를 따라와야 한다.나는 곧 더 많은 React에 관한 강좌를 쓸 것이다.
Reference
이 문제에 관하여(어떻게 상호작용 표를 만듭니까), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nsebhastian/react-form-real-time-validation-using-state-1eeg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)