logo
Back to blogs

Latest React Features You Should Know

Mar 10, 2023 - 5 min read

Latest React Features You Should Know

example without the latest ref

ExampleWithoutLatestRef.tsx
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

example with the latest ref

LatestReactFeatures.tsx
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};