Я не использую ReactJS, у меня есть попытка узнать, как работает реагирование, поэтому я пытаюсь воспроизвести его функцию createElement:
const createElement = (type, props = {}, ...children) => {
children = children.flat();
if (type.prototype && type.prototype.isClassComponent) {
const componentInstance = new type(props);
componentInstance.__vNode = componentInstance.render();
componentInstance.__vNode.data.hook = {
create: () => {
componentInstance.componentDidMount();
}
};
return componentInstance.__vNode;
}
У меня также есть этот класс компонентов
export class Component {
constructor(props) {
this.props = props || {};
}
componentDidMount() { }
render() {}
}
Теперь у меня есть этот HO C с именем injectReducer
export default reducers => WrappedComponent => {
class InjectReducer extends Component {
constructor(props) {
super(props);
...
}
render() {
return <WrappedComponent {...this.props} />;
}
}
return InjectReducer;
};
Теперь у меня есть этот класс, к которому будет применяться этот HO C:
class App extends unreact.Component {
constructor() {}
render() {}
componentDidMount() {
debugger;
}
}
export default compose(injectReducer(...))(App)
Когда я проверял эту строку кода:
componentInstance.__vNode.data.hook = {
create: () => {
componentInstance.componentDidMount();
}
};
componentInstance
однако не имеет statechange
и componentDidMount
метода.