Basically, I have used constructor
in React
for only 3 reasons -
state
like -class App extends React.Component {
constructor(props) {
super(props);
this.state = { counter: 0 };
}
}
but due to Babel's class-field support, I don't use it anymore
class App extends React.Component {
state = { counter: 0 };
}
bind
functions like -class App extends React.Component {
constructor(props) {
super(props);
this.increment.bind(this);
}
increment() {
}
}
but due to arrow
functions, I don't do it anymore
class App extends React.Component {
increment = () => {
}
}
createRef
like -class App extends React.Component {
constructor(props) {
super(props);
this.inputRef = React.createRef();
}
}
So can I use React.createRef
without using constructor
in React?
You can declare it as an class field just like state
.
class App extends React.Component {
state = { counter: 0 };
inputRef = React.createRef();
}
Babel will transpile it into something like the code below in stage-2 presets.
constructor(props) {
super(props);
this.state = { counter: 0 };
this.inputRef = React.createRef();
}
Yes, you can. For example:
const MyComponent = () => {
const inputRef = React.createRef();
return (
<input ref={inputRef} />
);
}
The only thing you cannot do, is pass the ref
attribute to a functional component:
render() {
// This won't work.
return <MyFunctionalComponent ref={this.inputRef} />
}
More info from the official docs, here:
You can, however, use the
ref
attribute inside a function component as long as you refer to a DOM element or a class component:
you can create a ref with ref callbacks without using constructor. <input ref={(element) => { this.inputRef = element; }} />
is what you need.
On class components write like below:
import React, { Component, createRef } from 'react';
class App extends Component {
inputRef = createRef();
render() {
return (
<div ref={this.inputRef}~~~
);
}
}
On functional components write like below:
import React, { useRef } from 'react';
const App = () => {
const inputRef = useRef(null);
return (
<div ref={inputRef}~~~
);
};
Definitely, the referenced element is mutable object but it should persist for the full lifetime of the component. it is not my opinion, this words are for ReactJS docs.
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