синтаксис.
сих пор не до конца понимаю дихотомию наследования (прототип и классика) в 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. Реагируйте здесь только для справки.