Guest User

Untitled

a guest
Dec 25th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Form extends Component {
  2.  
  3.   state = {
  4.     step: 0,
  5.     foo: '',
  6.     bar: '',
  7.     fruits: ['apple'],
  8.   }
  9.  
  10.   constructor(props) {
  11.     super(props);
  12.     this.onInputChange = this.onInputChange.bind(this);
  13.     this.onCheckboxChange = this.onCheckboxChange.bind(this);
  14.   }
  15.  
  16.   onInputChange({ target }) {
  17.     this.setState({
  18.       [target.name]: target.value
  19.     });
  20.   }
  21.  
  22.   onCheckboxChange({ target }) {
  23.     if (target.checked) {
  24.       //add to array
  25.       this.setState({
  26.         [target.name]: [
  27.           ...this.state[target.name],
  28.           target.value,
  29.         ]
  30.       });
  31.     } else {
  32.       //remove from array
  33.       this.setState({
  34.         [target.name]: this.state[target.name].filter(value => value != target.value)
  35.       });
  36.     }
  37.   }
  38.  
  39.   render() {
  40.     return (
  41.       <form>
  42.         { this.state.step === 0 && <Step0 onInputChange={this.onInputChange} onCheckboxChange={this.onCheckboxChange} values={this.state} /> }
  43.         { this.state.step === 1 && <Step1 onInputChange={this.onInputChange} onCheckboxChange={this.onCheckboxChange} values={this.state} /> }
  44.         { this.state.step === 2 && <Step2 onInputChange={this.onInputChange} onCheckboxChange={this.onCheckboxChange} values={this.state} /> }
  45.  
  46.         <pre>{ JSON.stringify(this.state, null, 2) }</pre>
  47.  
  48.       </form>
  49.     );
  50.   }
  51.  
  52. }
  53.  
  54. function Step0({ onInputChange, onCheckboxChange, values }) {
  55.   return (
  56.     <ul>
  57.       <li>
  58.         <b>Foo:</b>
  59.         <input type="text" name="foo" value={values.foo} onChange={onInputChange} />
  60.       </li>
  61.       <li>
  62.         <b>Bar:</b>
  63.         <input type="text" name="bar" value={values.bar} onChange={onInputChange} />
  64.       </li>
  65.       <li>
  66.         <b>Checkbox</b>
  67.         <p>
  68.           <label>
  69.             <input type="checkbox" name="fruits" value="apple" onChange={onCheckboxChange} checked={values.fruits.indexOf('apple') != -1} />
  70.             <b>Apple</b>
  71.           </label>
  72.         </p>
  73.         <p>
  74.           <label>
  75.             <input type="checkbox" name="fruits" value="orange" onChange={onCheckboxChange} checked={values.fruits.indexOf('orange') != -1} />
  76.             <b>Orange</b>
  77.           </label>
  78.         </p>
  79.       </li>
  80.     </ul>
  81.   );
  82. }
Advertisement
Add Comment
Please, Sign In to add comment