Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- slickslider
- 단어단위로떨어지기
- minwidth
- owlcarousel
- npm install
- node설치
- git lab clone
- 이미지반응형
- npm install 문제
- XEIcon
- react npm install
- Git clone
- maxwidth
- fontawesome
- npm start
- 의존성문제
- legacy-peer
- 그누보드반응형
- 아이콘사용법
- node 오류
- 동적객체
- vscode git clone
- 정적객체
- window 정책변경
- 웹아이콘
- 플러그인
- MediaQuery
- package.json
- 글자들여쓰기
- googleicon
Archives
- Today
- Total
어쩌다 알게 된 ƪ(•̃͡•̃͡ ƪ
[문법] state 사용, 스프레드 연산자 본문
728x90
1. 함수로 만들어서 onClick 안에 넣기
-> 눌러봐를 누르면 {좋아요}의 값이 + 1 씩 증가하고, 초기화를 누르면 {좋아요} 값이 0이 된다.
import { useState } from 'react'
function App() {
let post = '강남'; //변수
let [구이름, 구이름변경] = useState(['강남구', '송파구', '서초구']); //state // 구이름-> state의 값, b-> state를 변경하는 함수
// 변수와 state의 차이 -> 변수는 자동적으로 값이 변경되지 않음(내가 바꿔줘야 함), state는 값이 변경되면 자동으로 재렌더링 됨
let [좋아요, 좋아요변경] = useState(0);
function like(){
좋아요변경(좋아요 + 1);
}
function initialization(){
좋아요변경(0);
}
return (
<>
<div className="test">
<span>{ 구이름[1] }
<span onClick={() => like()}>눌러봐</span> {좋아요}
<span onClick={() => initialization()}>초기화</span>
</span>
</div>
</>
)
}
2. onClick 안에 바로 넣기
import { useState } from 'react'
function App() {
let [구이름, 구이름변경] = useState(['강남구', '송파구', '서초구']);
let [좋아요, 좋아요변경] = useState(0);
return (
<>
<div className="test">
<span>{ 구이름[1] }
<span onClick={() => {
좋아요변경(좋아요 + 1);
}}>눌러봐</span> {좋아요}
<span onClick={() =>{
좋아요변경(0);
}}>초기화</span>
</span>
</div>
</>
)
}
3. 스프레드 연산자(여러개 제어 가능) -> ...
스프레드 연산자를 사용하지 않고 가져오게 되면 값을 변경할 수 없다.
변수에 담아도 기존 데이터를 고대로 가져오기 때문에 console.log로 같은지 찍어보면 true가 나올 수 밖에 없다.
따라서, array나 object 데이터의 값을 변경하려고 할 땐 스프레드 연산자로 새롭게 독립적으로 복사해와야 한다.
import { useState } from 'react'
function App() {
let [구이름, 구이름변경] = useState(['강남구', '송파구', '서초구']);
let [state, setState] = useState({ 좋아요: 0, 좋아요2: 0 });
return (
<>
<div className="test">
<span>{ 구이름[0] }
<span onClick={() =>
setState({...state, 좋아요: state.좋아요 + 1})
// ...state(스프레드 연산자)는 state의 값을 그대로 복사 (업데이트에서 불변성을 유지하며 특정 속성 값만 변경)
}>눌러봐</span> {state.좋아요} <span onClick={() =>
setState({...state, 좋아요:0})
}>초기화</span></span>
<span>{ 구이름[1] }
<span onClick={() =>
setState({...state, 좋아요2: state.좋아요2 + 1})
}>눌러봐</span> {state.좋아요2}
<span onClick={() => {
setState({...state, 좋아요2: 0})
}}>초기화</span>
</span>
</div>
</>
)
}
4. 스프레드 연산자2 -> [...]
스프레드 연산자는 얕은 복사(Shallow Copy)로 객체나 배열의 최상위 수준 요소만 복사
-> 내부 중첩 구조까지 복사되지 않는다.
따라서 원본에 영향을 줄 수 있다.
스프레드 연산자를 사용하는 이유는 원본은 그대로 보존하기 위해서 인데 이런 문제점이 있다면 적절하게 잘 사용해야 할 것 같다.
//얕은 복사 사용 예시
function App() {
let [구이름, 구이름변경] = useState(['강남구', '송파구', '서초구']);
return (
<>
<div className="test">
<span>{ 구이름[0] }
<span onClick={() => {
let newName = [...구이름];
newName[0] = '강동구';
구이름변경(newName);
}}>변경</span>
</span>
</div>
</>
)
}
//중첩은 복사 되지 않는 부분 예시
let original = [1, 2, { a: 3 }];
let shallowCopy = [...original];
shallowCopy[0] = 100; // 복사본의 첫 번째 요소 변경
console.log(original); // [1, 2, { a: 3 }] -> 원본에는 영향 없음
shallowCopy[2].a = 200; // 복사본의 중첩 객체 수정
console.log(original); // [1, 2, { a: 200 }] -> 원본에도 영향을 줌
[문법] 얕은 복사와 깊은 복사가 뭐지??
앞에 글에서 스프레드 연산자를 공부하다보니 얕은 복사라는 말이 나왔다. 눌러봐를 누르면 {좋아요}의 값이 + 1 씩 증가하고, 초기화를 누르면 {좋아요} 값이 0이 된다.import { useState } from 'react'f
dazzle-bini.tistory.com
728x90
'개발 > 🟦 React' 카테고리의 다른 글
| [함수] sort() 오름차순, 내림차순 정렬하기 (4) | 2025.01.04 |
|---|---|
| [문법] 얕은 복사와 깊은 복사가 뭐지?? (4) | 2025.01.03 |
| [기초] 문법 (0) | 2025.01.03 |
| [작업 환경] node.js (2) | 2025.01.02 |
| [생각] react를 쓰는 이유 (2) | 2025.01.02 |
Comments
