То, что вы пытаетесь сделать, просто не должно работать.
Вы пытаетесь создать компонент React с использованием неподдерживаемого способа. Три способа создать собственное Реагировать компонент с:
class MyComponent extends React.Component { //class implementation
}
let MyComponent = React.createClass({ // class implementation
});
function MyCompent (props, context) { // component render method
}
В основном это сводится к тому:
- объявляющего класса (1-я форма), которая проходит React.Component.
- Создание класса из объекта (2-я форма) возвращает как-то объект-конструктор.
- реализация функции рендеринга.
Вы даете каждой из этих форм Реагировать для обновления и рендеринга дерева компонентов.
Что вы делали, пытался (я думаю) создать экземпляр группы React.Component с Object.assign, а затем передать его в ответ на рендер.
Реакция не работает таким образом. Вместо этого вы даете ему либо «конструктор» (первые 2 формы), который реализует #render() => reactElement (метод, возвращающий элементы React, а не компоненты), или вы передаете ему функцию, которая также возвращает React Elements.
PS: Для того, чтобы создать экземпляр класса без использования новый, ES5 представил Object.create:
var o = Object.create(proto); // o.__proto__ === proto
// the returned object has the supplied arguments as prototype.
реальный вопрос - почему вы даже ожидали, что он сработает. 'React.Component' является конструктором. Если вы хотите расширить компонент реагирования, используйте 'class Example expand React.Component'. – dfsq
Дело в том, чтобы отойти от 'createClass' и использовать расширения класса' Компонент', чтобы действительно использовать композицию вместо наследования. Расширяя конструктор 'React.Component', вы создаете потомков псевдокласса, который кажется неизбежным. Я надеялся получить объяснение, кроме рамки, не поддерживает эту функциональность. – RKichenama