【发布时间】:2018-10-31 15:41:17
【问题描述】:
我必须使用我无法修改的反应组件。由于更改,它来自外部来源。这也可能是我导入的 npm 包中的一个组件。这就是它的样子,一个简单的按钮:
class Button extends React.Component {
// ... more code above
render() {
const { onClick, disabled, children} = this.props;
return (
<button className={this.getClasses()} onClick={onClick} disabled={disabled}>
{this.props.symbol && <Icon symbol={this.props.symbol} />}
{children}
</button>
);
}
}
如何在无法访问文件的情况下添加一些功能(我可以创建自己的组件来扩展按钮)?例如,我想要一个type 道具。我想我可以创建一个<ButtonExtend onClick={resetState} type="button />。
我该怎么做?理想情况下,我想让它更加灵活,所以我也可以这样做:<ButtonExtend onClick={resetState} type="submit" name="extended button" />。
我希望 html 使用我的附加 html 属性呈现来自 <Button> 的所有属性。所以我想使用原始的功能和我的附加道具。或者,如果组件无法更改另一个组件的渲染方法,这甚至是不可能的?
【问题讨论】:
-
只需从
Button扩展您自己的类/组件并覆盖其render方法 -
你不能将属性注入到按钮 html 元素中,即使是装饰组件也是如此。不过,如果原始组件中仍有一些可重用的代码,您可以对其进行子类化并覆盖渲染方法。
-
@hindmost 以组合的方式不可能吗?
-
@abidibo 你有例子吗?不知道我是否可以关注
-
当然可以,就像
Button从React.Component扩展而来的一样
标签: javascript reactjs composition