Очевидно, что вы можете использовать все три параметра, представленные в Компоненте.Но в целом, только в расширенном случае мы используем props
, а не каждый раз.Точно так же вы можете использовать другие.
Вот пример с context api:
Компонент класса ES6
class ContextConsumer extends React.Component {
/*
contexTypes is a required static property to declare
what you want from the context
*/
static contextTypes = {
currentUser: React.PropTypes.object
};
render() {
const {currentUser} = this.context;
return <div>{currentUser.name}</div>;
}
}
Компонент класса ES6 с перезаписанным конструктором
class ContextConsumer extends React.Component {
static contextTypes = {
currentUser: React.PropTypes.object
};
constructor(props, context) {
super(props, context);
...
}
render() {
const {currentUser} = this.context;
return <div>{currentUser.name}</div>;
}
}
Пример взят из этого блога .Я предлагаю вам заглянуть в блог, чтобы быть более знакомым с ним.
Другой параметр - updater
, который вы, возможно, использовали this.forceUpdate()
, и при этом вызывайте средство обновления.Но факт, мы не используем updater
напрямую в обычном случае.Впрочем, я не сталкивался с таким случаем использовать обновитель внутри конструктора.Возможно, вам удастся выяснить, если вы столкнулись с каким-то сложным случаем.
Чтобы быть более откровенным и использовать реакцию с умным, я никогда даже не пытаюсь использовать props
, насколько это возможно.Они просто предоставлены нам, чтобы мы могли использовать при необходимости ловушки жизненного цикла.
Хорошо, позвольте мне объяснить это немного с помощью кода реакции:
function Component(props, context, updater) {
this.props = props;
this.context = context;
// If a component has string refs, we will assign a different object later.
this.refs = emptyObject;
// We initialize the default updater but the real one gets injected by the
// renderer.
this.updater = updater || ReactNoopUpdateQueue;
}
Component.prototype.forceUpdate = function(callback) {
this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');
};
The *Функция 1035 * имеет 3 аргумента, которые используются внутри функции.Позже определяется его прототип forceUpdate
, для которого updater
перехватывается, чтобы поставить в очередь forceUpdate с enqueueForceUpdate
.Таким образом, this.forceUpdate
фактически вызывает средство обновления Component
и позволяет нам повторно визуализировать компонент.Надеюсь, теперь имеет смысл взглянуть на его метод-прототип.
В чем разница между функцией-прототипом и литералом конструктора?
Насколько я понимаюВы хотели знать, почему конструктор вызывается с нужными параметрами.
Конструктор класса / функции используется для того, чтобы вы могли использовать переопределение для функции.Например, передавая props
внутри конструктора, вы хотели сделать переопределение с этим.Итак, вы явно уведомляете функцию об использовании реквизита, используемого внутри конструктора.