반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- React-Query
- axios
- react
- 다익스트라 #파티 #백준
- 백준 #직각삼각형
- 빡킹독
- RateLimit
- React #controlled component #비제어 컴포넌트 #제어 컴포넌트
- React #effect hook #useEffect
- react #useCallback #react Hook
- npm #not being able to find a file #npm install Error
- html entities
- DP #c++
- 코드스테이츠 #알고리즘 #그리디
- react fragment
- 얕은 복사 #깊은 복사 #shallow copy #deep copy
- 이친수
- 플로이드 #c++
- useState #Hooks
- 버블링 #갭쳐링 #이벤트 #JS
- #useRef #언제 쓰는데?
- donwstream #upstream #origin
- rate limit
- interceptors
- 백준 #적록색약
- React #Hook rules #Hook 규칙
- JWT #토큰 #refreshToken #accessToken #Token #token #localStorage #sessionStorage
- 노마드 코더 #타입스크립트 #typescript #class
- raect typescript #react #typescript #styled-component
- React #리액트 이벤트 주기 #리액트 이벤트
Archives
- Today
- Total
꿈꾸는 개발자
React Fragment-task와 연결해서 분석 본문
Fragment는 DOM에 별도의 노드를 추가하지 않고, 여러 자식을 그룹화할 수 있다.
class Table extends React.Component {
render() {
return (
<table>
<tr>
<Columns />
</tr>
</table>
);
}
}
- 코드가 위와 같이 작성됐을 때 <Colums /> component는 무조건 <td>만 반환해야 한다!
class Columns extends React.Component {
render() {
return (
<div>
<td>Hello</td>
<td>World</td>
</div>
);
}
}
- 코드가 위와 같이 작성됐을 경우 html은 유효하지 않을 것이다 => <div> 태그가 끼어있기 때문에!
- Fragment은 위와 같은 상황에서 발생하는 문제를 해결해준다!
사용법:
class Columns extends React.Component {
render() {
return (
<React.Fragment>
<td>Hello</td>
<td>World</td>
</React.Fragment>
);
}
}
- JSX의 규칙에 따라, 마크업 태그는 무조건 하나의 element 안에 감싸져서 return돼야 한다! 하지만, div로 감쌀 경우 상황에 따라, html가 유효하지 않을 수도 있다. 하지만 위와 같이 코드를 짠다면
<table>
<tr>
<td>Hello</td>
<td>World</td>
</tr>
</table>
- <Table />은 개발자가 의도한 대로, 위와 같이 렌더링된다!
단축문법:
class Columns extends React.Component {
render() {
return (
<>
<td>Hello</td>
<td>World</td>
</>
);
}
}
- 빈태그처럼 작성해도 <React.Fragment>을 작성한 것처럼 작동할 수 있다! 단, key/attributes을 지원하지 않음!
key가 있는 Fragments
function Glossary(props) {
return (
<dl>
{props.items.map(item => (
// React는 `key`가 없으면 key warning을 발생합니다.
<React.Fragment key={item.id}>
<dt>{item.term}</dt>
<dd>{item.description}</dd>
</React.Fragment>
))}
</dl>
);
}
- Key가 있을 경우 문법으로 명시해줘야 한다! ==> Key는 Fragment에 전달할 수 있는 유일한 attributes이다!(추후에 이벤트 헨들러와 같은 추가적인 attributes를 지원할 수도 있음!)
<React.Fragment>
<div className="tweetForm__container">
<div className="tweetForm__wrapper">
<div className="tweetForm__profile">
<img src="https://randomuser.me/api/portraits/men/98.jpg" />
</div>
<div className="tweetForm__inputContainer">
<div className="tweetForm__inputWrapper">
<div className="tweetForm__input">
<input
type="text"
defaultValue="parkhacker"
placeholder="your username here.."
className="tweetForm__input--username"
onChange={handleChangeUser}
></input>
<textarea
className="tweetForm__input--message"
onChange={handleChangeMsg}
></textarea>
</div>
<div className="tweetForm__count" role="status">
<span className="tweetForm__count__text">
{/* TODO : 트윗 총 개수를 보여줄 수 있는 Counter를 작성하세요. */}
{"total: "}
{TweetLists.length}
</span>
</div>
</div>
<div className="tweetForm__submit">
<div className="tweetForm__submitIcon"></div>
{/* TODO : 작성한 전송트윗을할 수 있는 button 엘리먼트를 작성하세요. */}
<button
className="tweetForm__submitButton"
onClick={handleButtonClick}
>
Tweet
</button>
</div>
</div>
</div>
</div>
<div className="tweet__selectUser"></div>
<ul className="tweets">
{/* TODO : 하나의 트윗이 아니라, 주어진 트윗 목록(dummyTweets) 갯수에 맞게 보여줘야 합니다. */}
{TweetLists.map((element) => {
return <Tweet tweet={element} key={element.id} />;
})}
</ul>
<Footer />
</React.Fragment>
- 위 코드에서 작성된 <React.Fragment>의 경우 각각 분산된 component들을 하나로 묶기 위해 사용됐다. JSX의 규칙를 생각하면 필수적!
출처:
https://ko.reactjs.org/docs/fragments.html
Fragments – React
A JavaScript library for building user interfaces
ko.reactjs.org