синтаксис.

сих пор не до конца понимаю дихотомию наследования (прототип и классика) в JavaScript.

Еслиclass это просто синтаксический сахар над прототипами, как я должен удалить сахар из него?

Можете ли вы показать мне различные подходы при создании элементов React с классами и прототипами (т.е. безclass & React.createClass)?

Итак, есть ли способ получить компонент с сохранением состояния, используя нативныйObject.create?

Как это:

const Hello = Object.create(React.Component.prototype, {
  componentDidMount: {
    value: function() {
      alert('Mounted');
    }
  },
  render: {
    value: function() {
      return <div>I love StackOverflow community! It is so helpful and friendly</div>;
    }
  }
});

ReactDOM.render(<Hello />, document.getElementById('root'));

Кажется, что-то вроде этого не будет работать из-за ограничений внутренней библиотеки.Но почему мы не можем использовать его в более естественной и прототипной природе JavaScript?

Есть примечание из официальных документов:https://facebook.github.io/react/docs/composition-vs-inheritance.html#so-what-about-inheritance

[...] мы не нашли ни одного варианта использования, в котором мы бы рекомендовали создавать иерархии наследования компонентов

Но это не такclass в основном о наследовании?

Я очень сбит с толку и хотел бы услышать ваше мнение о том, что я делаю и неправильно думаю?

Я задал этот вопрос в Reactiflux, и Брендан Херли предложил следующее:https://codepen.io/niechea/pen/xdVEvv?editors=0010

function MyComponent(props) {
  this.props = props;
  this.state = {
    clickCount: 0,
  };
}

MyComponent.prototype = Object.create(React.Component.prototype);

MyComponent.prototype.clickHandler = function() {
  this.setState({
    clickCount: this.state.clickCount + 1,
  });
}

MyComponent.prototype.render = function() {
  return (
    <div>
      <p>Hello, {this.props.name}.</p>
      <p>You have clicked {this.state.clickCount} time(s)!</p>
      <button onClick={this.clickHandler.bind(this)}>Click me</button>
    </div>
  );
}

ReactDOM.render(<MyComponent name="Bogdan" />, document.getElementById('app'));

Является ли его решение действительно прототипом?

Вот несколько ссылок:

http://javascript.crockford.com/prototypal.htmlhttps://medium.com/javascript-scene/the-two-pillars-of-javascript-ee6f3281e7f3http://henleyedition.com/making-inheritance-make-sense-with-object-create/

* Вопрос в основном о наследовании, а не о React. Реагируйте здесь только для справки.

Ответы на вопрос(6)

Ваш ответ на вопрос