import {useEffect, useState} from "react";
const MyComponent = () => {
const [data, setData] = useState(null);
useEffect(() => {
// componentDidMount - runs once after the initial render
// Fetch data or perform any side-effects here
fetchData();
return () => {
// componentWillUnmount - cleanup logic before component unmounts
// Cancel subscriptions, timers, etc.
};
}, []); // Empty dependency array means this effect runs only once (like componentDidMount)
useEffect(() => {
// componentDidUpdate - runs whenever 'data' changes
// Perform actions based on changes in 'data'
if (data !== null) {
// Do something with updated data
}
}, [data]); // Dependency array with 'data' means this effect runs whenever 'data' changes
const fetchData = async () => {
// Fetch data from an API
const result = await fetch("https://api.example.com/data");
const jsonData = await result.json();
setData(jsonData);
};
return <div>{/* Render based on 'data' */}</div>;
};
// =========================================================================
import React, {Component} from "react";
class MyComponent2 extends Component {
constructor(props) {
super(props);
this.state = {
count: 0,
data: null,
};
}
componentDidMount() {
// Runs after the component output has been rendered to the DOM
this.fetchData();
}
componentDidUpdate(prevProps, prevState) {
// Runs when the component updates (state or props change)
if (prevState.count !== this.state.count) {
// Do something when 'count' state changes
}
}
componentWillUnmount() {
// Runs before the component is removed from the DOM
// Clean up any timers, subscriptions, or other ongoing processes here
}
fetchData = async () => {
// Simulated API call
try {
const response = await fetch("https://api.example.com/data");
const jsonData = await response.json();
this.setState({data: jsonData});
} catch (error) {
console.error("Error fetching data: ", error);
}
};
render() {
return (
<div>
{/* Display 'data' or use it in the rendering logic */}
<p>Data: {JSON.stringify(this.state.data)}</p>
{/* Other JSX */}
</div>
);
}
}
export default MyComponent;
No comments:
Post a Comment