You can use an anonymous function to wrap one or multiple classes around the React.Component
class to add extra functionality:
First create the wrapper class with the extras:
compExtras.jsx
export default superClass => class extends superClass {
constructor(props) { // take props from 'MyComp'.
super(props);
this.foo = 'some value';
this.someChildProp = props.bar; // You can use props of 'MyComp'.
}
someExtraMethod(x) {
return [x, this.foo, this.childProp];
}
};
Now create a usual component that extends the React.Component
with your extras-class to inject the extra functionality:
myComp.jsx
import extras from './compExtras.js';
class MyComp extends extras(React.Component) { // extend 'React.Component' with 'extras'
constructor(props) {
super(props); // Pass props to the 'extras' class.
this.qux = 'some value';
}
render() {
console.log(this.someExtraMethod('foo')); // You have access to that method.
return <div></div>;
}
}
If you want to use multiple extensions for a component create your component like this:
class MyComp extends extrasOne(extrasTwo(React.Component)) {
Just make sure each extras-class passes props
to its parent class with super(props)
, so every class gets access to props
.