일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Component
- react
- next.js
- react webpack 설치
- node express 라우팅
- prop-types
- javascript 객체리터럴
- node 특징
- react refresh 설치
- React component
- react xcode 에러
- 객체 리터럴
- 클래스형과 함수형 컴포넌트
- react.js
- javascript
- JSON
- react props
- react class hook 비교
- props 개념
- class vs hooks
- webpack
- 화살표함수
- react hook
- ES6
- react hook의 종류
- node.js
- MVC패턴
- Today
- Total
림찌의 개발일기 💻
[React.js] 로컬 json 파일에서 단일 데이터 불러오기 (에러기록용) 본문
로컬 json data 파일을 이용해 포트폴리오 사이트를 만드는 중에 뭔가 이상한 점을 발견했다.
난, 단일 데이터를 가져오는 페이지에서 파람값으로 id 를 전달해주었고,
파람 id 와 json data id 값이 일치하면 데이터가 뿌려지도록 작성을 해주었었다.
const Component = ({id}) => {
return(
<div>
{jsonData.map((item) => (
<div key={item.id}>
{id == item.id ? <div id={item.id} />나는 예시예요 ㅎㅎ</div> : null}
</div>
))}
</div>
);
}
간단하게 이런식으로 작성을 했다고 치자... 가져온 id 는 '2' 라고 생각하자.
화면만 봤을 때는, 내가 원하는대로 특전 id 를 가진 json data 만 화면에 그려졌기 때문에 ,정상적으로 불러오는 줄 알았다.
그런데 css 수정을 위해 개발 모드를 켜서 element 를 찍어보는 순간... 엥?
이게 뭐시여... ?
보면 id 값이 일치하는 두 번째 객체에만 데이터가 들어가 있긴한데... 저 비어있는..수많은 div 가 날 두렵게했다...
데이터만 안가져올 뿐, 빈 element 는 map() 함수에 의해 생성되어 있던 것이다.
음 그래서 이것저것 시도를 해보았다... useState 를 이용해서 state 값을 변경해서 넣어야하나..?
-> 그러나 실패했고...
로컬 json 파일이었기 때문에 imort 를 통해 데이터를 불러오고 있었는데, axios 로 불러올까? 싶어서
axios get으로 불러오려했지만... -> 실패 (로컬 get 주소가 불안정할거라 생각했다...)
한 한시간 삽질 끝에 방법을 알았다.
우선 첫 번째 시도는 filter() 를 이용하는 것이었는데 filter() 를 이용해서 조건을 맞추고 return 값을 보내니...
Objects are not valid as a React child 라는 에러메세지가 돌아왔고.
리액트에서 object 값을 불러올때는 map 을 사용하라는 솔루션을 보고 어떻게든 map을 사용해야겠구나 생각했다.
그래서 발견한게..!
정답 :
filter() 함수로 우선 조건을 걸러주고, 그 뒤에 map() 함수로 element 와 데이터를 리턴하는 거였다!!!
const Component = ({id}) => {
const soulution = jsonData.filter((item) => {
if(id === item.id){
return item;
}
}).map((item) => {
return(
<div key={item.id}>
<div>{item.id} 나는 예시에용</div>
</div>
)
});
return(
<div>
{solution}
</div>
);
}
이렇게 solution 변수를 따로 빼서 작업했다.
filter 조건으로 id 와 item.id 값이 같은 객체만 item 데이터를 리턴을 해주고, 그 item 을 map() 함수로 뿌려주면...
이제 저 두려운 div 무리들이 사라지고, 딱 내가 원하는 단일 객체만이 map 으로 뿌려진다.
'React' 카테고리의 다른 글
[React] missing in props validation 뭔데? (1) | 2021.10.02 |
---|---|
[React.js] 클래스 컴포넌트(class)와 함수형 컴포넌트 (hook) (0) | 2021.06.10 |
[React.js] props에 대해 알아 보자. (0) | 2021.05.29 |
[react.js] Component 개념 (0) | 2021.05.02 |
[React.js] React refresh (hot loader) 설치(맥os 사용자 주목) (0) | 2021.04.13 |