-
글쓴이글
-
2021년 3월 12일 12:15 #7086
네이버시스템참가자더보기 버튼을 한번 누르면 false가 돼서 버튼을 안보이게 하는중에 궁금한점이 있어서요!!
일단 신발데이터를 리덕스에 있습니다!axios로 받아온 데이터를 리덕스 item에 넣으려고 하는데 cart 예제처럼
똑같이 했는데 TypeError: props.dispatch is not a function 에러가 나서
헤매다가 <More/>에 dispatch= {props.dispatch} 를 추가하니까 됐어요
cart예제랑 비교해 보면 cart도 app의 자식인데 <cart/>안에가 비어있어도 되었는데
왜 More은 써줘야하나요? react를 처음 배워서 아직 부모랑 자식개념이 안잡혀있는거같아요
Cart는 페이지가 따로 있어서 안써줘도 되는건가요? 근데 <Detail>에는item={props.item}를 써줬어요(안써도 돌아가긴하는데 일단 써놓긴 했어요) 어떨땐 쓰고 어떨땐 안쓰는게 궁금해요
그리고 app이 부모고 detail이 자식 , detail이 부모고 more이 자식 이런식으로 가는거 맞나요?
그럼 app의 손자는 more이 되는건지요?{
more === true
?
<More item={props.item} more변경={more변경} alert변경={alert변경} dispatch= {props.dispatch}/>
: null
}
function More(props){
return (
<button className="btn btn-primary" onClick={()=>{
props.alert변경(true);
axios.get('https://codingapple1.github.io/shop/data2.json')
.then((result)=>{
props.alert변경(false);
props.dispatch({type : '신발추가', payload : result.data });
props.more변경(false);
})
.catch((result)=>{
props.alert변경(false);
props.more변경(false);
console.log('실패 했어요')
})
}}>더보기
</button>
)
}2021년 3월 12일 12:49 #7090
codingapple키 마스터리덕스 문법인 dispatch는 컴포넌트하단에서 connect()(컴포넌트명) 해주셔야 props.dispatch도 사용가능합니다
app이 부모 detail이 자식입니다
detail안에 more가 있으면 app에게는 손자겠군요
부모가 가진 state혹은 정보를 자식도 사용하게 만들고 싶으면 props문법으로 전송해주어야합니다
2021년 3월 12일 13:40 #7091
네이버시스템참가자명쾌한 답변정말 감사합니다!!
connect를 해야 직접 리덕스랑 연결하는거군요!
근데 이런식으로는 못쓰나보네요
export default connect(state를props화)(App, More)
이럴경우 보통 부모에게서 리덕스를 받아서 아니면
다른페이지를 만들어서 export default connect(More) 이렇게 쓰나요?
2021년 3월 12일 15:16 #7093
codingapple키 마스터파일 하나에서 두개 이상의 컴포넌트를 리덕스와 connect하고 싶으면
connect(mapStateToProps)(App)
connect(mapStateToProps)(More)
따로 쓰라고 되어있을걸요아마 근데 이 경우 export default 문법은 중복해서 두번 쓸 수 없어서
export connect()
export connect()
어쩌구로 해주셔야합니다 그래서 import할 때도 귀찮기 때문에 connect 대신에 redux에 숨겨져있는 hook 문법인
useDispatch, useSelector 라는 훅을 react-redux 에서 import 해오시면 약간 코드 양이 줄어들 수 있습니다
-
글쓴이글
- 답변은 로그인 후 가능합니다.