gpt4 book ai didi

reactjs - 普通 es6 类和扩展 React.Component 有什么区别

转载 作者:行者123 更新时间:2023-12-03 13:46:35 25 4
gpt4 key购买 nike

我正在使用react-fullstack作为启动我的项目的脚手架。

我发现它的示例代码与官方的 React 文档有很大不同。

示例代码如下:

@withStyles(styles)
class Header {

render() {
return (
/* simple JSX code */
);
}
}


function withStyles(styles) {
return (ComposedComponent) => class WithStyles {

static contextTypes = {
onInsertCss: PropTypes.func
};

constructor() {
this.refCount = 0;
ComposedComponent.prototype.renderCss = function (css) {
let style;
if (ExecutionEnvironment.canUseDOM) {
if (this.styleId && (style = document.getElementById(this.styleId))) {
if ('textContent' in style) {
style.textContent = css;
} else {
style.styleSheet.cssText = css;
}
} else {
this.styleId = `dynamic-css-${count++}`;
style = document.createElement('style');
style.setAttribute('id', this.styleId);
style.setAttribute('type', 'text/css');

if ('textContent' in style) {
style.textContent = css;
} else {
style.styleSheet.cssText = css;
}

document.getElementsByTagName('head')[0].appendChild(style);
this.refCount++;
}
} else {
this.context.onInsertCss(css);
}
}.bind(this);
}

componentWillMount() {
/* some implement */
}

componentWillUnmount() {
/* some implement */
}

render() {
return <ComposedComponent {...this.props} />;
}

};
}

它甚至根本没有扩展 React.Component,我也看不到它使用原型(prototype)继承。

但是确实有效,而且每个组件都可以像官方文档所说的那样使用。

这是否意味着如果我使用 render 方法实现一个类,我就实现了一个 React 组件?

最佳答案

Does that mean if I implement a class with the render method, I implement a React component?

差不多了。 React.Component仅提供setStateforceUpdate方法。 如果需要,您只需继承 React.Component 即可。 编辑:随着无状态组件(函数)的引入,扩展了 React.Component 实际上是必需的,以便 React 可以区分函数和类构造函数。

关于reactjs - 普通 es6 类和扩展 React.Component 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31666921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com