Различные области в компоненте React

1

В React можно создать компонент со следующим синтаксисом:

import React, { Component } from 'react';
import ChildComponentOne from './ChildComponentOne';
import ChildComponentTwo from './ChildComponentTwo';

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      propOne : '',
      propTwo : '',
      propThree : '',
    };

    this.doThis = this.doThis.bind(this);
    this.doThat = this.doThat.bind(this);
  }

  doThis() {
    ...doingThis code
  }

  doThat() {
    ...doingThat code
  }

  render() {
    return (
      <ChildComponentOne propOne={this.state.propOne} doThis={this.doThis}/>
      <ChildComponentTwo propTwo={this.state.propTwo} propThree={this.state.propThree} doThat={this.doThat}/>
    );
  }
}

export default App;

Использует ли React синтаксис этого класса, потому что они пытаются создать инкапсулированную и аккуратную нотацию для организации компонентов. И все остальное после метода конструктора ориентировано на React.

Или можно написать что-то вроде этого:

App.prototype.doThis = function(){};
App.prototype.doThat = function(){};

function App(){
   this.state = {
      propOne : '',
      propTwo : '',
      propThree : '',
    };

   componentDidMount(){...somecode..}

   componentWillUnmount(){...somecode..}

  render(){
        return (
          <ChildComponentOne propOne={this.state.propOne} doThis={this.doThis}/>
          <ChildComponentTwo propTwo={this.state.propTwo} propThree={this.state.propThree} doThat={this.doThat}/>
        );
  }
}

Я знаю, что я не слишком далек, поскольку можно использовать обычную функцию для создания так называемого functional component.

Угадай вопрос, как использовать методы жизненного цикла...

  • 1
    Взгляните на компоненты высшего порядка
  • 1
    как использовать методы жизненного цикла - что именно вы имеете в виду? Там уже render и это метод жизненного цикла. Вам не нужно использовать это, это работа фреймворка.
Показать ещё 3 комментария
Теги:
class
prototype

1 ответ

1
Лучший ответ

Классы ES6 являются синтаксическим сахаром для классов функций. Они фактически становятся функциями, когда приложение переносится в ES5.

Ожидается, что компоненты класса React будут иметь метод render и прототипно наследуются от React.Component, в этом их отличие от функциональных компонентов.

render предпочтительно должна быть прототипом метода:

App.prototype = Object.create(Component.prototype);
App.prototype.render = function () { ... };

function App(props) { ... }

Потому что this.render =... instance не оправдан. Также может ожидаться, что это будет метод-прототип некоторых сторонних библиотек.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню