Skip to main content

11.03 Setting Up Links

Blog.js

Blog.js
// import axios from "axios";
import React, { Component } from "react";
import axios from "../../axios";
import FullPost from "../../components/FullPost/FullPost";
import NewPost from "../../components/NewPost/NewPost";
import Post from "../../components/Post/Post";
import "./Blog.css";

class Blog extends Component {
state = {
posts: [],
selectedPostId: null,
error: false,
};
componentDidMount() {
axios
.get("/posts")
.then((response) => {
const posts = response.data.slice(0, 4);
const updatedPosts = posts.map((post) => {
return {
...post,
author: "Pash",
};
});
this.setState({ posts: updatedPosts });
// console.log(response);
})
.catch((error) => {
// console.log(error);
this.setState({ error: true });
});
}

postSelectedHandler = (id) => {
this.setState({ selectedPostId: id });
};
render() {
let posts = <p style={{ textAlign: "center" }}>Something went wrong!</p>;
if (!this.state.error) {
posts = this.state.posts.map((post) => {
return (
<Post
key={post.id}
title={post.title}
author={post.author}
clicked={() => this.postSelectedHandler(post.id)}
/>
);
});
}
return (
<div className="Blog">
<header>
<nav>
<ul>
<li>
<a href="/">Home</a>
</li>
<li>
<a href="/new-post">New Post</a>
</li>
</ul>
</nav>
</header>
<section className="Posts">{posts}</section>
<section>
<FullPost id={this.state.selectedPostId} />
</section>
<section>
<NewPost />
</section>
</div>
);
}
}

export default Blog;

Blog.css

Blog.css
.Posts {
display: flex;
flex-flow: row wrap;
justify-content: center;
width: 80%;
margin: auto;
}

.Blog ul {
list-style: none;
margin: 0;
padding: 0;
width: 100%;
text-align: center;
}

.Blog li {
display: inline-block;
margin: 20px;
}

.Blog a {
text-decoration: none;
color: #000;
}

.Blog a:hover,
.Blog a:active {
color: #fa923f;
}