본문 바로가기
React

React Component중첩, props, state

by flykimjiwon 2022. 1. 15.
반응형

- Component중첩

 

컴포넌트1 > 컴포넌트2 > 컴포넌트3

 

이런식으로 있으면 중첩으로 props를 계속 전달해주면된다.

 

컴포넌트1에 있는 state를 컴포넌트3에서 쓰고싶다? 그리고 변경함수까지

 

전부 props->props로 계속 전달할 수 있다.

 

대체방식으로는 redux같은것이 있지만 우선 알아두자

 

이런식으로 컴포넌트 1에있는 재고를 컴포넌트3에서 관리한다고 생각해보자

 

컴포넌트1-> 컴포넌트2 로 props

컴포넌트2-> 컴포넌트3 으로 props하면 될것이다.

 

 let [재고,재고변경] = useState([10,11,12])

 

첫번째에 컴포넌트에 선언된, 가장상위 App컴포넌트에 선언된자료

 

<Detail shoes={shoes} 재고 = {재고} 재고변경={재고변경}></Detail>

그 안에있는 두번째 컴포넌트 Detail에 state랑 state변경함수 둘다 props로 전송해준다.

 

<div className="row">
        <div className="col-md-6">
          <img src={"https://codingapple1.github.io/shop/shoes"+(찾은상품.id+1)+".jpg"} width="100%" />
        </div>
        <div className="col-md-6 mt-4">
        <h4 className="pt-5">{찾은상품.title}</h4>
          <p>{찾은상품.content}</p>
          <p>{찾은상품.price}</p>

         <Info 재고 = {props.재고[id]}></Info>

          <button className="btn btn-danger" onClick={()=>{
            var newArray = [...props.재고]
            newArray[id] = newArray[id]-1
            props.재고변경(newArray)
          //  props.재고변경([9,10,11])
          }}>주문하기</button> 
          <button className="btn btn-danger" onClick={()=>{
            history.push('/')
           }}>뒤로가기</button> 
        </div>
      </div>
      
      .....
      
      function Info(props){
  return(
    <p>재고 : {props.재고}</p>
  )
}

그럼 이와같이 Detail함수중 집중해서 봐야할곳 맨아래 Info라고 만든 컴포넌트에 다시 props를 보내기위해

         <Info 재고 = {props.재고[id]}></Info>

이곳에서 다시 props에있는걸 또다시 props로 전송해준다. 

 

<button className="btn btn-danger" onClick={()=>{
            var newArray = [...props.재고]
            newArray[id] = newArray[id]-1
            props.재고변경(newArray)
          //  props.재고변경([9,10,11])
          }}>주문하기</button>

그리고 버튼안에 onClick 콜백함수안에서

 

배열을 복사해 삽입하는방식으로 클릭할 때 마다 값이 1씩 떨어지게 설정해준다.

 


요악하자면

 

props는 계속 하위컴포넌트로 전송할 수 있다.

반응형

'React' 카테고리의 다른 글

React context API  (0) 2022.01.16
React 배포(build)  (0) 2022.01.16
React Ajax  (0) 2022.01.15
React useEffect  (0) 2022.01.15
React Style(CSS,SASS)  (0) 2022.01.14