React shop pj Redux 230930

혜빈·2023년 9월 30일
0

REACT 보충개념

목록 보기
17/48

버튼 누르면 state에 상품 추가

  • reducer에 새로운 수정함수 하나를 추가해주면 됨
  • 그런데, 위와 같은 코드는 id가 2번인 상품 하나만 추가되는 코드
  • 여러개를 추가하고 싶다면? -> payload 활용!

-> payload활용한 수정함수 만들기


-> export


-> 사용할 파일에 가서 import (이 실습에서는 Detail.js파일)


-> dispatch도 필요하니까 import


-> dispatch 선언


-> 사용하기

  • 이런식으로 사용하면 원하는 object 데이터들을 넣을 수 있음

상세 페이지마다 다른 상품 추가하고 싶으면?

  • addItem()안에
    {id: 현재페이지에 있는id, name: 현재페이지에 있는 상품 제목, count: 현재 페이지에 있는 상품 count} 를 넣어주면 됨

리액트에서 자주 쓰는 if문 작성패턴 5개

1. 컴포넌트 안에서 쓰는 if/else

function Component() {
  if ( true ) {
    return <p>참이면 보여줄 HTML</p>;
  } else {
    return null;
  }
} 
function Component() {
  if ( true ) {
    return <p>참이면 보여줄 HTML</p>;
  } 
  return null;
} 
  • 이렇게 'else { ' 생략 가능

2. JSX안에서 쓰는 삼항연산자 (ternary operator)

==> 조건문 ? 조건문 참일때 실행할 코드 : 거짓일 때 실행할 코드

function Component() {
  return (
    <div>
      {
        1 === 1
        ? <p>참이면 보여줄 HTML</p>
        : null
      }
    </div>
  )
} 
function Component() {
  return (
    <div>
      {
        1 === 1
        ? <p>참이면 보여줄 HTML</p>
        : ( 2 === 2 
            ? <p>안녕</p> 
            : <p>반갑</p> 
          )
      }
    </div>
  )
} 
  • 삼항연산자는 중첩사용도 가능하지만, 복잡해서 return문 밖에서 if else쓰고 그 결과를 변수로 저장해놓고 변수를 삼항연산자에 집어넣어 사용하는 방식을 추천

3. && 연산자로 if 역할 대신하기

*** 자바스크립트 && 연산자

true && false; // false
true && true; // true
  • '왼쪽 오른쪽 둘 다 true면 전체를 true로 바꿔주세요'
true && '안녕'; // 안녕
false && '안녕'; // false
true && false && '안녕'; // false
  • '자바스크립트는 &&로 연결된 값들 중에 처음 등장하는 false값을 찾아주고 그게 아니면 마지막 값을 넘겨준다'
function Component() {
  return (
    <div>
      {
        1 === 1
        ? <p>참이면 보여줄 HTML</p>
        : null
      }
    </div>
  )
} 

function Component() {
  return (
    <div>
      { 1 === 1 && <p>참이면 보여줄 HTML</p> }
    </div>
  )
}
  • "만약에 이 변수가 참이면

    를 이 자리에 반환하고 참이 아니면 null 반환"
  • 위 아래 코드는 같은 코드인데, 더 간결하게 사용하려면 아래코드 사용하기

4. switch / case 조건문

function Component2(){
  var user = 'seller';
  if (user === 'seller'){
    return <h4>판매자 로그인</h4>
  } else if (user === 'customer'){
    return <h4>구매자 로그인</h4>
  } else {
    return <h4>그냥 로그인</h4>
  }
}
  • if문을 연달아 여러개 써야되는 상황에 switch 문법 사용하면 더 간결함
function Component2(){
  var user = 'seller';
  switch (user){
    case 'seller' :
      return <h4>판매자 로그인</h4>
    case 'customer' :
      return <h4>구매자 로그인</h4>
    default : 
      return <h4>그냥 로그인</h4>
  }
}
  1. switch (검사할변수){} 작성
  2. 그 안에 case 검사할변수가이거랑일치하냐 : 를 넣어줌
  3. 그래서 이게 일치하면 case : 밑에 있는 코드를 실행
  4. default : 는 그냥 맨 마지막에 쓰는 else문과 동일함

장점 : if문 연달아쓸 때 코드가 약간 줄어들 수 있음
단점 : 조건식란에서 변수하나만 검사할 수 있음

5. object/array 자료형 응용

  • 경우에 따라 다른 html 태그 보여주고 싶은 경우,
    if문 여러개/ 삼항연산자 대신 작성할 수 있는 방법

현재 state가 info면

상품정보

현재 state가 shipping이면

배송정보

현재 state가 refund면

환불약관

보여주고 싶은 경우


function Component() {
  var 현재상태 = 'info';
  return (
    <div>
      {
        { 
           info : <p>상품정보</p>,
           shipping : <p>배송관련</p>,
           refund : <p>환불약관</p>
        }[현재상태]
      }

    </div>
  )
} 
  • 자바스립트 object 자료형에 보여주고 싶은 HTML 담기
  • Object{ } 뒤에 [ ]대괄호 붙여서 'key값이 현재상태인 자료를 뽑겠습니다'라고 써놓기
var 탭UI = { 
  info : <p>상품정보</p>,
  shipping : <p>배송관련</p>,
  refund : <p>환불약관</p>
}

function Component() {
  var 현재상태 = 'info';
  return (
    <div>
      {
        탭UI[현재상태]
      }
    </div>
  )
} 
  • 이렇게 변수에 저정해서 써도 깔끔

localStorage (반영구적 저장 가능)

  • 확인하는 방법 -> 콘솔 - Application - Local Storage
  1. key: value 형태로 저장 가능
  2. 최대 5MB 문자만 저장 가능
  3. 사이트 재접속해도 남아있음 (브라우저 청소하면 삭제됨)
    --> 서버/ DB 없는 경우 임시로 Local Storage사용해서 데이터 저장 가능

로컬스토리지/ 세션스토리지

  • 로컬스토리지 : 재접속해도 남아있음
  • 세션스토리지 : 브라우저 종료시 사라짐

로컬스토리지에 object 자료 저장하기

  • console창(또는 코드작성하는 곳)에 localStorage.setItem('이름','값') 작성

데이터 출력하기

  • console(또는 코드작성하는 곳)에 localStorage.getItem('이름')

데이터 삭제하기

  • console(또는 코드작성하는 곳)에 localStorage.removeItem('이름')

데이터 수정하는 문법

  • 없음!

세션스토리지 문법

  • localStorage을 sessionStorage로 바꾸면 됨

  • sessionStorage.setItemsetItem('이름','값')

  • sessionStorage.getItem('이름')

  • sessionStorage.removeItem('이름')


localStorage에 array/object 저장하려면?

  • 저장 불가하지만, JSON으로 바꿔주면 가능

  • JSON자료 : object / array 자료에 ' ' 추가한 것

  • array/ object -> JSON 변환하는 법 : JSON.stringify( )사용하기

  • JSON이기 때문에 꺼낸것.name 이런식으로 object 문법 사용불가능

  • JSON -> array/ object 변환하는 법 : JSON.parse( )


코드 짜는 법

  • 한글 먼저 쓰고 코드로 옮기기

실습

  1. 누가 Detail페이지 접속하면
  2. 현재 페이지에 보이는 상품id 가져와서
  3. localStorage에 watch항목에 있던 [ ] 에 추가

array에서 중복제거 쉽게 하려면 Set 자료형 사용

array -> Set -> array

결론

: 사이트 재접속시에도 데이터 유지되게 만들려면 localStorage 사용하기

모든 state를 localStorage에 자동저장?
redux-persist 등 외부 라이브러리 사용

  • 리덕스랑 비슷한 라이브러리
  • Jotai
  • Zustand
    --> 리덕스와 비슷하고 더 쉬움
profile
최강 개발자를 꿈꾸는 병아리

0개의 댓글