31
loading...
This website collects cookies to deliver better user experience
/api/v1/posts/10
/api/v1/posts/:id
useParams()
hook, we have access to the route parameters of our applications.npm i react-router-dom axios
// @src/App.jsx
import React from "react";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import Home from "./pages/Home";
import Post from "./pages/Post";
const App = () => {
return (
<Router>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/post/:id" component={Post} />
</Switch>
</Router>
);
};
export default App;
// @src/pages/Home.jsx
import React from "react";
const Home = () => {
return <h1>Home</h1>
};
export default Home;
useState()
hook. And we already have in mind that we are going to have a list of posts so the state will be an array.// @src/pages/Home.jsx
import React, { useState } from "react";
const Home = () => {
const [posts, setPosts] = useState([]);
return <h1>Home</h1>
};
export default Home;
useEffect()
and we will consume the jsonplaceholder Api using axios.// @src/pages/Home.jsx
import React, { useEffect, useState } from "react";
import axios from "axios";
const Home = () => {
const [posts, setPosts] = useState([]);
useEffect(() => {
const fetch = async () => {
try {
const { data } = await axios.get("https://jsonplaceholder.typicode.com/posts");
setPosts(data);
} catch (err) {
console.error(err);
}
};
fetch();
}, []);
return <h1>Home</h1>
};
export default Home;
Link
component from the react router dom. Like this:// @src/pages/Home.jsx
import React, { useEffect, useState } from "react";
import { Link } from "react-router-dom";
import axios from "axios";
const Home = () => {
const [posts, setPosts] = useState([]);
useEffect(() => {
const fetch = async () => {
try {
const { data } = await axios.get("https://jsonplaceholder.typicode.com/posts");
setPosts(data);
} catch (err) {
console.error(err);
}
};
fetch();
}, []);
return (
<>
{posts.map((el) => (
<article key={el.id}>
<Link>
<h1>{el.title}</h1>
</Link>
<p>{el.body}</p>
</article>
))}
</>
);
};
export default Home;
// @src/pages/Home.jsx
import React, { useEffect, useState } from "react";
import { Link } from "react-router-dom";
import axios from "axios";
const Home = () => {
// Hidden for simplicity
return (
<>
{posts.map((el) => (
<article key={el.id}>
<Link to={`/post/${el.id}`}>
<h1>{el.title}</h1>
</Link>
<p>{el.body}</p>
</article>
))}
</>
);
};
export default Home;
Post.jsx
page.// @src/pages/Post.jsx
import React from "react";
const Post = () => {
return <h1>Single Post</h1>
};
export default Post;
// @src/pages/Post.jsx
import React, { useState } from "react";
const Post = () => {
const [post, SetPost] = useState({});
return <h1>Single Post</h1>
};
export default Post;
useParams()
hook from the react router dom and get the id.// @src/pages/Post.jsx
import React, { useState } from "react";
import { useParams } from "react-router-dom";
const Post = () => {
const { id } = useParams();
const [post, SetPost] = useState({});
return <h1>Single Post</h1>
};
export default Post;
useEffect()
hook to fetch the post data as soon as the component is rendered. But this time we're going to pass the id that we got dynamically to get that specific post.// @src/pages/Post.jsx
import React, { useEffect, useState } from "react";
import { useParams } from "react-router-dom";
const Post = () => {
const { id } = useParams();
const [post, SetPost] = useState({});
useEffect(() => {
const fetch = async () => {
try {
const { data } = await axios.get(`https://jsonplaceholder.typicode.com/posts/${id}`);
SetPost(data);
} catch (err) {
console.error(err);
}
};
fetch();
}, []);
return <h1>Single Post</h1>
};
export default Post;
// @src/pages/Post.jsx
import React, { useEffect, useState } from "react";
import { useParams } from "react-router-dom";
const Post = () => {
const { id } = useParams();
const [post, SetPost] = useState({});
useEffect(() => {
const fetch = async () => {
try {
const { data } = await axios.get(`https://jsonplaceholder.typicode.com/posts/${id}`);
SetPost(data);
} catch (err) {
console.error(err);
}
};
fetch();
}, []);
return (
<article>
<h1>{post.title}</h1>
<p>{post.body}</p>
<br />
<button>Go back</button>
</article>
);
};
export default Post;
useHistory()
hook to push the user to the main page.// @src/pages/Post.jsx
import React, { useEffect, useState } from "react";
import { useParams, useHistory } from "react-router-dom";
const Post = () => {
const { id } = useParams();
const { push } = useHistory();
const [post, SetPost] = useState({});
useEffect(() => {
const fetch = async () => {
try {
const { data } = await axios.get(`https://jsonplaceholder.typicode.com/posts/${id}`);
SetPost(data);
} catch (err) {
console.error(err);
}
};
fetch();
}, []);
return (
<article>
<h1>{post.title}</h1>
<p>{post.body}</p>
<br />
<button onClick={() => push("/")}>Go back</button>
</article>
);
};
export default Post;