Mar 10, 2023 - 5 min read
1const page = () => {
2 const [selectedPetFood, setSelectedPetFood] = useState("food");
3 const [selectedPet, setSelectedPet] = useState("dog");
4
5 const handleClick = async () => {
6 console.log(selectedPetFood, selectedPet, "before"); // {selectedPetFood: 'food', selectedPet: 'dog'}
7 // changing the state of selectedPetFood to 'food1'
8 await new Promise((resolve) => setTimeout(resolve, 3500));
9 console.log(selectedPetFood, selectedPet, "after"); // {selectedPetFood: 'food', selectedPet: 'dog'}
10 };
11 return (
12 <div className="w-96">
13 <Input
14 type="text"
15 value={selectedPetFood}
16 onChange={(e)=> setSelectedPetFood(e.target.value)}
17 />
18 <Input
19 type="text"
20 value={selectedPet}
21 onChange={(e)=> setSelectedPet(e.target.value)}
22 />
23 <Button onClick={handleClick} disabled={!selectedPetFood || !selectedPet}>
24 Submit
25 </Button>
26 </div>
27 );
28};
29
1const page = () => {
2 const [selectedPetFood, setSelectedPetFood] = useState("food");
3 const [selectedPet, setSelectedPet] = useState("dog");
4 const refSelectedPetFood = React.useRef(selectedPetFood);
5 const refSelectedPet = React.useRef(selectedPet);
6
7 React.useEffect(() => {
8 refSelectedPetFood.current = selectedPetFood;
9 refSelectedPet.current = selectedPet;
10 }, [selectedPetFood, selectedPet]);
11 const handleClick = async () => {
12 console.log(refSelectedPetFood.current, refSelectedPet.current, "before"); // {selectedPetFood: 'food', selectedPet: 'dog'}
13 // changing the state of selectedPetFood to 'food1'
14 await new Promise((resolve) => setTimeout(resolve, 3500));
15 console.log(refSelectedPetFood.current, refSelectedPet.current, "after");
16 };
17 return (
18 <div className="w-96">
19 <Input
20 type="text"
21 value={selectedPetFood}
22 onChange={(e)=> setSelectedPetFood(e.target.value)}
23 />
24 <Input
25 type="text"
26 value={selectedPet}
27 onChange={(e)=> setSelectedPet(e.target.value)}
28 />
29 <Button onClick={handleClick} disabled={!selectedPetFood || !selectedPet}>
30 Submit
31 </Button>
32 </div>
33 );
34};