OBJECTS AND STATE

 HERE WE TRY TO CREATE A LUDO BOARD.


WE PASS THE COLORS AS OBJECTS.

  let [moves, setMoves] = useState({ blue: 0, red: 0, green: 0, yellow: 0 });
initial state

HERE , INORDER TO UPDATE THE COUNT OF BLUE, WE WRITE


  let updateBlue(){
    moves.blue+=1;
    console.log(`moves.blue=${moves.blue}`)
    setMoves(moves);
  }


HERE , IT DOES'NOT WORK.

THE SCREEN IS NOT RENDERED. THIS IS BECAUSE THE STATE OF THE OBJECT DOESNOT CHANGE.

BECAUSE IN JS , OBJECTS AND ARRAYS CANNOT BE MANIPULATED OR MODIFIED.

EVEN IF THE VALUES OF AN OBJECT ARE CHANGED, THE ADDRESS OF THE OBJECT REMAINS SAME.

WE KNOW THAT THE COMPONENT IS RE-RENDERED IF AND ONLY IF THE STATE CHANGES.AS THE OBJECT'S STATE REMAINS SAME , THE COMPONENT DOESNOT RENDER.

HENCE WE HAVE TO CREATE A COPY OF THE OBJECT. WE USE "SPREAD"(...OBJ) TO CREATE A COPY.


LUDOBOX.JSX

import { useState } from "react";
export default function Board() {
  let [moves, setMoves] = useState({ blue: 0, red: 0, green: 0, yellow: 0 });

  let updateBlue = () => {
    setMoves((prevMoves) => {
      return { ...prevMoves, blue: prevMoves.blue + 1 };
    });
  };
  let updateRed = () => {
    setMoves((prevMoves) => {
      return { ...prevMoves, red: prevMoves. red+ 1 };
    });
  };
  let updateYellow = () => {
    setMoves((prevMoves) => {
      return { ...prevMoves, yellow: prevMoves.yellow + 1 };
    });
  };
  let updateGreen = () => {
    setMoves((prevMoves) => {
      return { ...prevMoves, green: prevMoves.green + 1 };
    });
  };
  return (
    <>
      <p>Blue moves:{moves.blue}</p>
      <button style={{ backgroundColor: "blue" }} onClick={updateBlue}>
        +1
      </button>

      <p>Red moves:{moves.red}</p>
      <button style={{ backgroundColor: "red" }} onClick={updateRed}>
        +1
      </button>

      <p>Yellow moves:{moves.yellow}</p>
      <button
        style={{ backgroundColor: "yellow", color: "black" }}
        onClick={updateYellow}
      >
        +1
      </button>

      <p>Green moves:{moves.green}</p>
      <button style={{ backgroundColor: "green" }} onClick={updateGreen}>
        +1
      </button>
    </>
  );
}











Comments

Popular posts from this blog

DEPENDENCIES IN useEffect()

ACTIVITY1

CONDITIONALS