工程師與貓
ESC
Content
    ↑↓ navigate open esc close
    Published on

    React Component Design - State Initializers

    Authors
    • avatar
      Name
      Alex Yu

    延續Toggle的例子,有些時候我們希望將元件的 state 還原回初始 state,與其用 setState 將on的狀態設成 false,到不如利用下列的技巧

    class Toggle extends React.Component {
      static defaultProps = {
        initialOn: false,
        onReset: () => {},
      };
     
      initialState = { on: this.props.initialOn };
     
      state = this.initialState;
     
      reset = () =>
        this.setState(this.initialState, () => this.props.onReset(this.state.on));
     
      getStateAndHelpers() {
        return {
          on: this.state.on,
          toggle: this.toggle,
          reset: this.reset,
          getTogglerProps: this.getTogglerProps,
        };
      }
      // same as before
    }
     
    function Usage({
      initialOn = false,
      onToggle = (...args) => console.log('onToggle', ...args),
      onReset = (...args) => console.log('onReset', ...args),
    }) {
      return (
        <Toggle initialOn={initialOn} onToggle={onToggle} onReset={onReset}>
          {({ getTogglerProps, on, reset }) => (
            <div>
              <Switch {...getTogglerProps({ on })} />
              <hr />
              <button onClick={() => reset()}>Reset</button>
            </div>
          )}
        </Toggle>
      );
    }