I have several methods that return jsx objects that I want to be able to call from outside the class, currently, the only way I found that work is to export arrow functions from outside of the class in the same file, but I end up with too many functions out of the class.
So is there a way to export multiple class methods from the same file and keep them in the class?
I don't want to make a new class for each of those functions because they're related, and I need to call them out of the class so I'll be able to add them in Storybook.
Example of what I want:
//A.js
class A{
export foo() {return (<div>...</div>)}
export bar() {...}
}
export default A
What I have now that works:
//A.js
export default class A{
...
}
export const foo = () => {...}
export const bar= () => {...}
If your methods does not rely on its own properties or variables (accessed using this
), you might want to try using static
methods
export default class A {
static foo() {return (<div>...</div>)}
static bar() {...}
...
}
And then, you can use it like so:
import A from './A';
A.foo();
The advantage of using static method is that you don't need to create an instance to use it. And, it does not get re-created when you create a new instance.
Reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static
Live Demo:
class A {
static foo() {
return "foo() called";
}
static bar() {
console.log(this.foo() + " from bar()");
}
}
class B {
constructor() {
A.bar();
}
}
new B();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With