DAWM

Regresar

React - Hooks: useEffect

react banner

El hook useEffect es una herramienta fundamental en React para manejar efectos secundarios en componentes funcionales. Los efectos secundarios son operaciones que pueden tener impactos fuera del ámbito directo de la función en la que se ejecutan, como la manipulación del DOM, la suscripción a servicios externos, la realización de peticiones HTTP, y la configuración de timers.

Fuente: React Hooks lifecycle method

El hook useEffect combina el comportamiento de los métodos del ciclo de vida componentDidMount y componentDidUpdate en componentes funcionales.

De variable locales …


...
	{/* Datos */ }

	/*
		let menuItems = [ ... ]
	*/

	/*
		let radioItems = [ ... ]
	*/
...

… a variables de estado


import Datum from '../interfaces/Datum.tsx';

export default function Calculator({ setPlan, setResult }) {
    ...
}
export default function Calculator({ setPlan, setResult }) {

  {/* Hooks: useState */ }
  ...
  const [menuItems, setMenuItems] = React.useState<Array<Datum>>([]);
  const [radioItems, setRadioItems] = React.useState<Array<Datum>>([]);

  ...

}
export default function Calculator({ setPlan, setResult }) {

	{/* Hooks: useState */ }

	...

	{/* Hooks: useEffect */ }
	React.useEffect(() => {

	    (async () => {

				const res = await fetch('https://raw.githubusercontent.com/aavendan/datos/main/tutoriales/planes.xml');
				const textXML = await res.text();

				const parser = new DOMParser();
				const xml = parser.parseFromString(textXML, "application/xml");

				const data = Array.from(xml.getElementsByTagName("item")).map(element => {
					return {
						"title": element.getElementsByTagName("title")[0].textContent,
						"subtitle": element.getElementsByTagName("subtitle")[0].textContent,
						"intro": element.getElementsByTagName("intro")[0].textContent,
						"description": element.getElementsByTagName("description")[0].textContent,
					}
				})

				setMenuItems(data)

	      {/*const res = await fetch('https://raw.githubusercontent.com/aavendan/datos/main/tutoriales/planes.json');
	      const data = await res.json();
	      setMenuItems(data)*/}
	    
	    })();

	    (async () => {
	    
	      const res = await fetch('https://raw.githubusercontent.com/aavendan/datos/main/tutoriales/tiempo.json');
	      const data = await res.json();
	      setRadioItems(data)
	    
	    })();

	}, [])

	...
}

react_useeffect1

Resultado Final


react_useeffect2

Referencias