React useState

useState is a React Hook that lets you add a state variable to your component.

useState simple counter example

import { useState } from "react";

function CounterPage() {
  const [count, setCount] = useState(0);

  const decrementCount = () => {
    setCount((prevCount) => prevCount - 1);
  };

  const incrementCount = () => {
    setCount((prevCount) => prevCount + 1);
  };

  return (
    <section className="counter-page">
      <p>Count: {count}</p>
      <button onClick={decrementCount}>Decrement</button>
      <button onClick={incrementCount}>Increment</button>
    </section>
  );
}

export default CounterPage;

We cannot use short version because it accesses old count value.
So this code would increase counter only once.

setCount(count + 1);
setCount(count + 1);

PostList example:

const PostList = ({ posts }) => {
  return (
    <div>
      {posts.map((post, index) => (
        <div key={index}>
          <h3>{post.title}</h3>
          <div>{post.body}</div>
        </div>
      ))}
    </div>
  );
};
export default PostList;

// Usage
import { useState, useEffect } from 'react';
import axios from 'axios';
const App = () => {
  const [posts, setPosts] = useState([]);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    axios.get('https://site.com/posts')
      .then(response => {
        setPosts(response.data);
        setLoading(false);
      })
      .catch(error => {
        console.error('Error:', error);
        setLoading(false);
      });
    /*fetch('https://site.com/posts')
      .then(response => response.json())
      .then(data => setPosts(data))
      .catch(error => console.error(error));*/
  }, []);

  return (
    <div>{loading ? <p>Loading...</p> : <PostList posts={posts} />}</div>
  );
};
export default App;

Leave a Comment