Я понимаю, что мой вопрос немного предвзят, но я очень новичок в Javascript и prototypes
, и я читал об этом, но я действительно не понимаю, как применять эти методы к моим практическим задачам. Так что пример был бы очень полезен. Итак, у меня есть компонент React
, который в основном выглядит так:
var Component1 = React.createClass({
getInitialState: function () {
return ({
searchable: true,
})
},
function1: function () {
return ({
somevalue
})
},
render: function () {
var redText = {
color: 'red'
};
var redBorder = {
color: 'red',
border: '1px solid red'
};
return (
<form>
<div>
<a onClick={this.props.handleAddClick}>Something</a>
</div>
<div>
<label>Some label</label>
<input type="text"/>
</div>
</form> )
});
У меня также есть Component2
, который в принципе абсолютно такой же, но имеет один дополнительный <input/>
внутри return
его функции render
.
У меня также есть Component3
, который выполняет те же функции, но имеет другую функцию render()
.
Так как же применить здесь наследование и не копировать-вставить 3 раза? Мне просто не хватает практической иллюстрации, поэтому я был бы признателен.
Edit1_________________________________________________________________ Итак, я попытался реализовать наследование прототипов в соответствии с первым ответом, но, похоже, React не видит этих функций: getInitialState()
равно null, начальное состояние после рендеринга равно null. Что не так с этим подходом?
Я тоже попробовал пойти по учебнику и сделал:
function MyPrototype() {};
MyPrototype.prototype.getInitialState = function () {
return ({
someProperty: true;
})
};
function Component1() {};
Component1.prototype = Object.create(MyPrototype.prototype);
Component1.prototype.render = function () {
console.log(this);
return (<div></div>)};
var MyComponent1 = React.createClass(new Component1());
Но когда я открываю браузер, я получаю сообщение об ошибке: Uncaught Invariant Violation: createClass(...): Class specification must implement a
rendermethod.
Что я делаю неправильно?
Редактировать2_______________________________________________
На самом деле, я вижу, что React не поддерживает миксины и прототипы. Вместо этого следует использовать состав. Это объясняется в этой статье: Dan Статья Абрамова Миксины мертвы. Да здравствует композиция