Наследование в реакт?

129
14 апреля 2018, 20:16

У меня есть по сути два компонента с одной и той же логикой в методе componentWillReseiveProps и в некоторых методах еще Как мне применить наследование или как избежать дублирования логики?

Answer 1

Наследования между компонентами в реакте не приветствуется.

Здесь есть три варианта:

  1. Передавать дублируемый код prop-сами

  2. Выделить какой-то базовую компоненту и, передавая пропсы, создавать более специфичные компоненты. Пример из документации с Dialog и SignUpDialog:

    function Dialog(props) {
      return (
        <FancyBorder color="blue">
          <h1 className="Dialog-title">
            {props.title}
          </h1>
          <p className="Dialog-message">
            {props.message}
          </p>
          {props.children}
        </FancyBorder>
      );
    }
    class SignUpDialog extends React.Component {
      constructor(props) {
        super(props);
        this.handleChange = this.handleChange.bind(this);
        this.handleSignUp = this.handleSignUp.bind(this);
        this.state = {login: ''};
      }
      render() {
        return (
          <Dialog title="Mars Exploration Program"
                  message="How should we refer to you?">
            <input value={this.state.login}
                   onChange={this.handleChange} />
            <button onClick={this.handleSignUp}>
              Sign Me Up!
            </button>
          </Dialog>
        );
      }
      handleChange(e) {
        this.setState({login: e.target.value});
      }
      handleSignUp() {
        alert(`Welcome aboard, ${this.state.login}!`);
      }
    }
    
  3. Вынести часто используемые операции, не связанные с UI, в отдельный класс
READ ALSO
Как сделать подобный слайдер? [требует правки]

Как сделать подобный слайдер? [требует правки]

Из готовых решений что-то у меня не получается найтиА вообще было бы лучше своим кодом сделать

117
Первый код забирает свойства со второго (размер текста)

Первый код забирает свойства со второго (размер текста)

Возможно вам будет сложно понятьЯ не программист, я использую сервис, позволяющий создавать сайт практически без кода

175