当前位置:  首页>> 技术小册>> ReactJS面试指南

答案:React 中处理表单元素有两种方式:受控组件和非受控组件。

受控组件是指表单元素的值受 React 组件状态(state)控制,每当用户输入数据时,React 会更新组件状态并重新渲染组件。使用受控组件可以方便地对表单数据进行处理和验证,例如:

  1. class MyForm extends React.Component {
  2. constructor(props) {
  3. super(props);
  4. this.state = { username: '', password: '' };
  5. }
  6. handleSubmit(event) {
  7. console.log(`Username: ${this.state.username}, Password: ${this.state.password}`);
  8. event.preventDefault();
  9. }
  10. handleUsernameChange(event) {
  11. this.setState({ username: event.target.value });
  12. }
  13. handlePasswordChange(event) {
  14. this.setState({ password: event.target.value });
  15. }
  16. render() {
  17. return (
  18. <form onSubmit={this.handleSubmit}>
  19. <label>
  20. Username:
  21. <input type="text" value={this.state.username} onChange={this.handleUsernameChange} />
  22. </label>
  23. <br />
  24. <label>
  25. Password:
  26. <input type="password" value={this.state.password} onChange={this.handlePasswordChange} />
  27. </label>
  28. <br />
  29. <button type="submit">Submit</button>
  30. </form>
  31. );
  32. }
  33. }

非受控组件则是指表单元素的值不受 React 组件状态控制,而是由 DOM 元素本身控制。非受控组件通常用于简单的表单元素,例如:

  1. class MyForm extends React.Component {
  2. constructor(props) {
  3. super(props);
  4. this.handleSubmit = this.handleSubmit.bind(this);
  5. this.usernameInput = React.createRef();
  6. this.passwordInput = React.createRef();
  7. }
  8. handleSubmit(event) {
  9. console.log(`Username: ${this.usernameInput.current.value}, Password: ${this.passwordInput.current.value}`);
  10. event.preventDefault();
  11. }
  12. render() {
  13. return (
  14. <form onSubmit={this.handleSubmit}>
  15. <label>
  16. Username:
  17. <input type="text" ref={this.usernameInput} />
  18. </label>
  19. <br />
  20. <label>
  21. Password:
  22. <input type="password" ref={this.passwordInput} />
  23. </label>
  24. <br />
  25. <button type="submit">Submit</button>
  26. </form>
  27. );
  28. }
  29. }

这两种方式各有优缺点,具体使用哪种方式取决于具体的需求和场景。


该分类下的相关小册推荐: