Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var Person = declare([], { say: function() {
console.log("hello"); });
var Man = declare([Person], { say: function() {
this.inherited(arguments);
console.log("i'm a man");
});
var Woman = declare([Person], { say: function() {
this.inherited(arguments);
console.log("i'm a woman");
});
var AwesomeMixin= declare([Person], { say: function() {
this.inherited(arguments);
console.log("And i'm awesome");
});
var AwesomeMan = declare([Man, AwesomeMixin]);
var AwesomeWoman = declare([Woman, AwesomeMixin]);
(new AwesomeMan()).say();
(new AwesomeWoman()).say();
module.exports = React.createClass(Human);
module.exports.Class = Human;
npm install react@0.13.0-alpha.1) они уже работают с нормальными конструкторами и можно использовать наследование.//базовый класс компонента
var BaseComponent = React.createClass({
render: function() {
throw new Error('Component must implement render method')
}
})
//обычное прототипное наследование
var MyComponent = function() {}
MyComponent.defaultProps = {name: 'MyComponent'}
MyComponent.prototype = Object.create(BaseComponent.prototype)
MyComponent.prototype.render = function() {
return React.DOM.div(null, this.hello())
}
MyComponent.prototype.hello = function() {
return 'Hello, my name is ' + this.props.name
}
defaultProps нужно задавать статически.var IndexView = require('./templates/views/index'),
UsersView = require('./templates/views/users'),
UserView = require('./templates/views/user');
var IndexFactory = React.createFactory(IndexView),
UsersFactory = React.createFactory(UsersView),
UserFactory = React.createFactory(UserView);
//snip
this.route(urls.user, 'user', function (user_id) {
var user = users.get(user_id) || new User({'name': user_id});
React.render(UserFactory({model: user}), document.getElementById('content'));
user.fetch();
console.log('hello user')
});
(псевдо)Наследование для компонентов ReactJS