Home > database >  useState asynchronous problem with select
useState asynchronous problem with select

Time:03-22

i have a problem with my useState function when i use select, actually i get the previous value on the selected option instead of the selected option

  const [option, setOption] = useState('');

               <select
                className="form-select"
                aria-label="Default select example"
                onChange={(e: React.ChangeEvent<HTMLSelectElement>) => {
                  const newVal: string = e.target.value;
                  setOption(newVal);
                  console.log(option);
                }}
              >
                <option selected>selectionne ta couverture</option>
                <option value="Spot">Spot</option>
                <option value="Forward">Forward</option>
                <option value="Swap">Swap</option>
              </select>

how do i make it get the selected value

CodePudding user response:

Setting the state in React acts like an async function.
Meaning that the when you set the state and put a console.log right after it, it will likely run before the state has actually finished updating.

Which is why we have useEffect, a built-in React hook that activates a callback when one of it's dependencies have changed.

Example:

useEffect(() => {
   // Should show updated state -
   console.log(state);
}, [state])

The callback will run only after the state has finished changing and a render has occurred.

  • Note: "state" in the example is interchangeable with whatever state piece you're dealing with, such as option in this case.

Check the documentation for more info.

  • Related