"상태"란?
화면(UI)에 영향을 주는 값.
값이 바뀌면, 그걸 사용하는 부분의 화면이 자동으로 다시 그려준다.
import React, { useState } from "react";
const [count, setCount] = useState(0);
return (
<div>
<p>숫자: {count}</p>
<button onClick={() => setCount(count + 1)}>+1</button>
</div>
);
배열에 있는 값들을 하나씩 꺼내서 "새로운 배열"로 바꿔주는 함수.
원본 배열은 그대로 있고, map을 거친 결과만 새 배열로 나옴.
리액트는 여러 개의 같은 태그(div 등)를 반복해서 만들 때
각각을 구분할 수 있는 "key"라는 필수.
그래야 리액트가 화면을 효율적으로 업데이트할 수 있음
messages = ['안녕', '반가워']
messages.map((msg, idx) => (
<div key={idx}>{msg}</div>
))
// 결과:
// <div key=0>안녕</div>
// <div key=1>반가워</div>
어떤 코드를 실행하고 싶을 때 쓰는 함수
import React, { useEffect } from 'react';
useEffect(() => {
// 여기에 코드를 쓰면, 화면이 그려진 뒤 실행됨
}, [의존성]);
useEffect(() => {
console.log('count가 바뀔 때마다 실행!');
}, [count]);
const [isDarkMode, setIsDarkMode] = useState(false);
useEffect(()=>{
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
setIsDarkMode(true)
}else{
setIsDarkMode(false)
}
},[])
useEffect(()=>{
if(isDarkMode){
document.documentElement.classList.add('dark');
localStorage.theme = 'dark';
}else{
document.documentElement.classList.remove('dark');
localStorage.theme = '';
}
},[isDarkMode])