1번으로 작성했다가 2번으로 변경

1. 하나의 상태로 따로 관리(feat. useEffect)

const CartList = ({ carts, isLoading }: Props) => {
  // 선택된 장바구니 배열
  const [selectedCartItems, setSelectedCartItems] = useState<CartItem[]>([]); 
  // 장바구니 상품들 총액 
  const [expectedPrice, setExpectedPrice] = useState<number>(0); 

  // 장바구니 상품들의 총액을 구하는 함수 
  const calculateExpectedPrice = () => {
    const PRICE_WHEN_SELECTED_NOTHING = 0;

    return selectedCartItems.reduce(
      (acc, { product, quantity }) => acc + product.price * quantity,
      PRICE_WHEN_SELECTED_NOTHING,
    );
    // 선택된 장바구니 배열을 감시하다가 변경이 일어나면 총액을 관리하는 상태를 업데이트
    useEffect(() => {
      setSelectedCartItems(calculateExpectedPrice())
    }
    }, [selectedCartItems]);
    return (
      <div>선택된 아이템의 개수:{expectedPrice}</div>

  )

2. 상태 업데이트를 순수 함수를 통해서

const CartList = ({ carts, isLoading }: Props) => {
  const [selectedCartItems, setSelectedCartItems] = useState<CartItem[]>([]);
   
  // 파라미터로 장바구니 정보를 받고, 그 정보로 총액을 구하는 함수 
  const calculateExpectedPrice = (selectedCartItems: CartItem[]) => {
    const PRICE_WHEN_SELECTED_NOTHING = 0;

    return selectedCartItems.reduce(
      (acc, { product, quantity }) => acc + product.price * quantity,
      PRICE_WHEN_SELECTED_NOTHING,
    );
  }
   
  ....

  return (
      <div>선택된 아이템의 개수:{calculateExpectedPrice(selectedCartItems)}</div>

과정

처음에는 1번처럼 작성했다가 이 로직을 테스트하고 싶어졌다. 그러다가 2번의 형태로 바꾸게 되었다.

선택은? - 2번(상태 업데이트를 순수 함수를 통해서)

긍정적인 부분