# State Management

# Introduction

# useState Hook

Declares a state variable with a declared update state function and default value.

# Syntax

const ["State Name", "Update State Function Name"] = useState("Default Value");

# State Implementation

# Initializing State

import { useState } from "react";
const [categoryId, setCategoryId] = useState();

# ReactJS Built-in State Management

# Hooks

Hooks let you use state and other React features without writing a class.

# useState

Allows states to be managed within components.

# BlogsPage Component

Adding CategoriesList component to utilize useState.

import React, { useState } from "react";

import Navbar from "../../components/Navbar";
import Heading from "../../components/Heading";
import BlogList from "../../components/BlogList";
import Footer from "../../components/Footer";

import "../../App.css";
import "./index.css";

// Importing dummy data
const data = require("../../dummy-data.json");
let blogPosts = data.blogPosts;
const categories = data.categories;

export default function BlogsPage() {
  //Initializing our states:
  const [categoryId, setCategoryId] = useState();
  const [blogs, setBlogs] = useState([]);

  const CategoriesList = () => {
    return categories.map((category, index) => {
      return categoryId === category.id.toString() ? (
        <button
          key={index}
          onClick={() => setCategoryId(category.id)}
          style={{ color: "blue" }}
        >
          <p key={index}>{category.title}</p>
        </button>
      ) : (
        <button
          key={index}
          onClick={() => setCategoryId(category.id)}
          style={{ color: "black" }}
        >
          <p key={index}>{category.title}</p>
        </button>
      );
    });
  };

  return (
    <>
      <Navbar />
      <div className="container">
        <Heading />
        <div className="scroll-menu">
          <CategoriesList />
        </div>
        <div style={{ display: "flex", justifyContent: "space-between" }}>
          <p className="page-subtitle">Blog Posts</p>
        </div>
        <BlogList blogPosts={blogPosts} />
      </div>
      <Footer />
    </>
  );
}

index.css

.scroll-menu {
  overflow: auto;
  white-space: nowrap;
}

.scroll-menu button {
  background-color: white;
  border: none;
  display: inline-block;
  color: white;
  text-align: center;
  padding: 14px;
  font-size: larger;
}