I’m trying to use a ref with a Button component, but myRef.current is always null.
Interestingly, if I do the same thing with a MenuItem, the ref works as expected.
I found a workaround that allows refs to work. I modified the __createSCInstance function in ReactComponent.js like this:
Then, in my project, I create the button like this:
I’m confident that you’ll find a more elegant solution that allows using the standard React ref.
PS:
I noticed that the ref works for both <MenuItem> and <Button>, but only in this case:
However, if I do it like this:
then ref.current is null.
Interestingly, if I do the same thing with a MenuItem, the ref works as expected.
I found a workaround that allows refs to work. I modified the __createSCInstance function in ReactComponent.js like this:
Code:
__createSCInstance(className, config) { for (let prop of this.REACT_PROPS) delete config[prop]; if (!config.children && config.childComponents) { config.children = config.childComponents; } // ***************begin workaround for refs const created = isc[className].create(config); if (this.props && this.props.REF) { const r = this.props.REF; if (typeof r === "function") { r(created); } else { r.current = created; } } //***************** end workaround for refs return created; }
Code:
<Button REF={this.loadButton} title={Strings.get("load")} disabled="true" click={this.loadData.bind(this)} />
PS:
I noticed that the ref works for both <MenuItem> and <Button>, but only in this case:
Code:
render() { return ( <> <Button {...Properties.getButton()} ref={this.loadButton} title={Strings.get("load")} disabled="true" click={this.loadData.bind(this)} /> </> ); }
Code:
render() { let owner = this; return ( <VLayout> <Button {...Properties.getButton()} ref={this.loadButton} title={Strings.get("load")} disabled="true" click={this.loadData.bind(this)} /> </VLayout> ); }