Rya*_*yan 9 javascript ecmascript-6 reactjs
我知道在香草ES6你可以写一个class是extendSA功能类。这是解释here。
React 通过extending支持 ES6 类组件React.Component和功能组件。但是,在尝试extend使用功能组件时出现以下错误。
TypeError: Cannot call a class as a function
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一些扩展组件并适用于 ES6 类组件和功能组件的代码。我想编写一个返回组件的函数,但我只想扩展和修改一些道具而不是高阶组件。
下面是一些我尝试过但不起作用的示例代码。这可能吗?我意识到BarExtended根本不会渲染Bar,但我只是在测试。除非这是问题的一部分。
function Bar() {
return (
<h1>Bar</h1>
);
}
class BarExtended extends Bar {
render() {
return (
<h1>BarExtended</h1>
);
}
}
ReactDOM.render(
<div>
<BarExtended />
</div>,
document.getElementById("foo")
);
Run Code Online (Sandbox Code Playgroud)
警告至少据我所知,这实际上不可能在反应方面做到,因为你需要从 React.Component 继承以使其成为反应组件,就像 bar 只是一个函数一样。
class Bar extends React.Component {
}
Run Code Online (Sandbox Code Playgroud)
您不必使用带有 React 的类,您可以使用常规函数。但我认为您正在寻找的是高阶组件。这可以为您传递给它的任何组件提供额外的功能。
function Bar(WrappedComponent){
return class BarExtended extends React.Component {
addThisFunction(){
console.log('I extended the wrapped component with functionality')
}
render (
return (
<WrappedComponent addThisFunction={this.addThisFunction}/>
)
)
}
}
Run Code Online (Sandbox Code Playgroud)
如果你真的想参加常规课程,你可以这样做。这是来自类文档的正确信息。
function Animal (name) {
this.name = name;
}
Animal.prototype.speak = function () {
console.log(this.name + ' makes a noise.');
}
class Dog extends Animal {
speak() {
console.log(this.name + ' barks.');
}
}
var d = new Dog('Mitzie');
d.speak();
Run Code Online (Sandbox Code Playgroud)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes
| 归档时间: |
|
| 查看次数: |
21767 次 |
| 最近记录: |