.js 파일인데 html과 같은 문법을 쓴다. 이게 뭐지?
✅.js파일에서 쓰는 html == JSX
CSS 지정해줄때, class가 아니라, 'className'
변수 넣을때는 { 변수 } == 데이터 바인딩
// 서버에서 가져온 데이터라고 가정
let post = '강남 우동 맛집'
<h4>{ post }</h4>
<h4 style={ {color:'red', fontSize:'16px'} }></h4>
ex)
return(
<div className="app">
</div>
<div></div>
);
import { useState } from 'react';
function App() {
let [a,b] = useState('여자 코드 추천');
}
- Destructuring 문법
let num=[1,2]; - array에서 각각 1, 2를 뽑아내고 싶다면 인덱스를 활용할 수 있다. let a = num[0]; let c = num[1]; - 또다른 방법이 바로 destructuring! let [a,c]= [1,2];
❓변수 문법이 있는데 왜 state를 사용해야할까?
function 함수 (){
console.log(1);
}
<div className="list">
<h4>{ 글제목[0] }<span onClick={ 함수 }>😊</span> {따봉} </h4>
<p>5/14 발행</p>
</div>
- 함수 그대로 집어넣어도 괜찮음
onClick={function(){console.log(1)}}
onClick={()=> {console.log(1)}}
let [따봉,따봉변경]= useState(0);
<div className="list">
<h4>{ 글제목[0] }<span onClick={ ()=> {따봉변경(따봉+1)} }>😊</span> {따봉} </h4>
<p>5/14 발행</p>
</div>
let [글제목,b]= useState(['여자 코트 추천','강남 우동 맛집','파이썬독학']);
<button onClick={()=>{
let copy=[글제목];
copy[0]= '남자 코트 추천';
b(copy);
}}>button</button>
이렇게 하면 버튼을 클릭해도 변하지 않는다.
❓ 왜?
🔴 state 변경함수의 특징 중, 기존 state==신규 state의 경우 변경하지 않음.
🔴 [array/object] 특징 : array/object 담은 변수에는 화살표만 저장됨.
🟣 변수1 & 변수2 의 주소가 같으면 변수1==변수2 비교해도 true 나옴 (ex. copy == 글제목)
✅ array를 수정했지, 변수에 있는 주소는 수정된 상태가 아니다. 따라서 state가 변경되지 않은 것으로 인식! 따라서 state 변경을 안해줌!
해결책
✅ array를 다른 주소에!
✅ state가 array/object 라면 독립적 카피본(shallow copy)을 만들어서 수정해야 한다.
let copy=[...글제목];
📝 컴포넌트 만드는 법
1. function 만들기 (아예 바깥에!)
2. return()안에 html 담기
3. <함수명></함수명> or <함수명/> 쓰기
function Modal(){
return (
<div className='modal'>
<h4>제목</h4>
<p>날짜</p>
<p>상세내용</p>
</div>
)
}
❎ 컴포넌트의 단점
++ 의미없는 div를 작성하기 싫다 -> <></> 사용 가능