이고잉 코치님이 주신 선물~~
https://stackblitz.com/
vsCode에서 설치하는 것: 혼자 개발한다면 이것도 좋습니다.
prettierrc에 설정 담아놓기: 여러사람들과 코드를 공유한다면 이렇게 해야합니당 컨벤션을 맞추는 것을 저장할 때마다 강제하기 위해서!
// 현재 시간을 구하는 함수
function getCurrentTime() {
const now = new Date();
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
const seconds = String(now.getSeconds()).padStart(2, '0');
return `${hours}:${minutes}:${seconds}`;
}
console.log(getCurrentTime());
// Counter2 컴포넌트
function Counter2() {
const [times, setTimes] = useState([]);
function up() {
times.push(getCurrentTime());
console.log('up-times', times);
setTimes(times);
}
return (
<>
<h1>카운터2</h1>
<button onClick={up}>+</button>
<ol></ol>
</>
);
}
function Counter2() {
const [times, setTimes] = useState([]);
console.log('component - times', times);
function up() {
const newTimes = [...times];
newTimes.push(getCurrentTime());
setTimes(newTimes);
}
return (
<>
<h1>카운터2</h1>
<button onClick={up}>+</button>
<ol></ol>
</>
);
}
그럼 타입을 지정해보자!
function containNumber(a:number,b:number){
return[a,b]
}
console.log(containNumber(10,20))
//const a:number[] = [1,2] // 숫자만 들어오는 배열이다!!!
이렇게 타입을 명시해줘서 내가 원하는 타입을 지정할 수 있다!
제네릭 : 데이터 타입을 넘버로 특화시킨 함수를 일반화해서 어떤 데이터 타입도 수용할 수 있게 하겠다. 그러면서 타입 안정성을 놓치지 않겠다!
function containGeneric<T>(a:T,b:T):T[]{
return [a,b];
}
console.log(containGeneric<number>(1,2));//number부분을 string으로 바꾸면 string타입을 받게 된다!!
<데이터타입>
을 생략해줄 수 있다.console.log(containGeneric(1,2));
- 보통 state의 intialState에 들어가는 값을 보고 타입을 자동적으로 추론하는데(따라서 안써도 되는 경우가 있음), []이렇게 빈 배열의 경우는 추측할 수 없기 때문에 never[]로 인식합니당
void는 없다! 이고 never는 추측할 수 없어요 입니당
(void는 return값이 없다는 뜻!)
const [times, setTimes] = useState(['']);
// const [times, setTimes] = useState<String[]>([]);
// string[]이 들어온다는 것을 명시해주자!!
a = [1,2,3]
b = a.map((value) => {
return value * 2
}
)
console.log(a,b);//[1,2,3] [2,4,6];
function Counter2() {
const [times, setTimes] = useState<String[]>([]);
console.log('component - times', times);
function up() {
const newTimes = [...times];
newTimes.push(getCurrentTime());
setTimes(newTimes);
}
return (
<>
<h1>카운터2</h1>
<button onClick={up}>+</button>
<ol>
{times.map((value) => {
return <li>{value}</li>;
})}
</ol>
</>
);
}
function Counter3() {
const [count, setCount] = useState<number>(0);
const [step, setStep] = useState<number>(1);
return (
<>
<h1>Counter3</h1>
<input
type="number"
value={step}
onChange={(e) => {
setStep(Number(e.target.value));
}}
></input>
<button onClick={() => setCount(count + step)}>+</button>
{count}
</>
);
}
끝내기 전에 확장 기능 소개~!
https://react.dev/learn/react-developer-tools
출처 : 엘리스 아카데미