Reputation: 313
I created one functional component and declared some variables in it.
const Foo = (props) => {
let instanceVariable = null;
const selectValue = (value) => {
instanceVariable = value;
}
const proccessVariable = () => {
// Use instanceVariable and do some task
}
return(
<SelectionOption onChange={selectValue} />
);
}
I observed that whenever parent component of Foo
is re-rendered or sometime Foo
itself re-renders instanceVariable
set back to null
. Instead of this I want to save selectedValue
init and proccess it later on proccessVariable()
method.
If I set instanceVariable
as state
it will work and there is no need of state to just hold the selected value.
I know useEffect(()=>{}, [])
only run one time but how can I declare instanceVariable
there and use it in other functions.
Can you please let me know what I'm doing wrong.
Upvotes: 10
Views: 8402
Reputation: 1689
I think useState
is the correct hook in your case. You have an option that is selected by the user and then you do something with the selected value. That's state.
The React docs mention that useRef
is not appropriate for storing information you want to display on the screen. In your case you're displaying a list of options and then the user selects one of them, that is information being displayed on the screen, hence useState
would be the correct approach.
Upvotes: 0
Reputation: 281804
Since you declare a variable directly in your functional component, its value is reset everytime your component re-renders. You can make use of useRef
to declare instance variables in functional component
const Foo = (props) => {
let instanceVariable = useRef(null);
const selectValue = (value) => {
instanceVariable.current = value; // make sure to use instanceVariable.current
}
const proccessVariable = () => {
// Use instanceVariable.current and do some task
}
return(
<SelectionOption onChange={selectValue} />
);
}
Upvotes: 17