const [count, setCount] = useState<number>();
function up () {
setCount((prevState) => {
return prevState + 1;
});
}
const [count, setCount] = useState<number>(0);
function up () {
setCount(count+3);
setCount(count+2);
setCount(count+1);
}
//1
const [count, setCount] = useState<number>(0);
function up () {
setCount((prevState) => {
return prevState + 1;
});//1
setCount((prevState) => {
return prevState + 1;
});//2
setCount((prevState) => {
return prevState + 1;
});//3
}
리액트에서 set을 다루는 방법
1. state를 바로 넣어서 다루기
setter를 함수안에 여러개 넣으면 의도하지 않은 동작이 일어날수 있다
function up(){setCount(count+1)}
2. 콜백함수로 감싸서 다루기
이전 state 값을 사용해서 새로운 값을 만들고 싶다면 콜백함수로 감싸는게 안전!
function up(){
setCount((prev)=>{
return prev + 1
})
}
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, index) => {//index를 받고
return <li key={index}>{value}</li>;// key에 넣어줌!!!
})}
</ol>
</>
);
}
function Counter4() {
const [step, setStep] = useState(1);
const [count, setCount] = useState<countType[]>([]);
console.log('count', count);
return (
<>
<h1>Counter4</h1>
<input
type="number"
value={step}
onChange={(e) => {
setStep(Number(e.target.value));
}}
/>
<button
onClick={() => {
const newCount = [...count];
newCount.push({ time: getCurrentTime(), step: step });
setCount(newCount);
}}
>
+
</button>
<ul>
{count.map((value, index) => {
return (
<li key={index}>
{value.time}, {value.step}
</li>
);
})}
</ul>
0
</>
);
}
function Counter4() {
const [step, setStep] = useState(1);
const [count, setCount] = useState<countType[]>([]);
console.log('count', count);
let total = 0;
for (let i = 0; i < count.length; i++) {
total = total + count[i].step;
}
return (
<>
<h1>Counter4</h1>
<input
type="number"
value={step}
onChange={(e) => {
setStep(Number(e.target.value));
}}
/>
<button
onClick={() => {
const newCount = [...count];
newCount.push({ time: getCurrentTime(), step: step });
setCount(newCount);
}}
>
+
</button>
{total}
<ul>
{count.map((value, index) => {
return (
<li key={index}>
{value.time}, {value.step}
</li>
);
})}
</ul>
</>
);
}
배열.reduce((누적된값, 현재순번의원소)=> return 누적된값 + 현재순번의원소},0)
count.reduce((acc, cur) => {
console.log(acc, cur);
return acc + cur.step;
}, 0)
<table>
{count.map((value, index) => {
return (
<tr key={index}>
<td>{value.time}</td>
<td>{value.step}</td>
</tr>
);
})}
</table>
인라인 스타일로 넣었다. 그런데 css를 다른 컴포넌트에서도 활용하게 해보자!
새 파일(App.module.css)을 만들고 간단한 style 태그를 작성!
.layout {
border: 10px solid blue;
}
export default와 export의 차이
export default
export
export contentType ~~~
import {contentType} from './~~~';
이름 정확하게 입력!!!!
새 터미널 열고!
npm install @mui/material @emotion/react @emotion/styled
package.json에서 설치된 것을 확인!
<Container></Container>
를 입력한 후 저 태그 안에 여태까지 만든 컴포넌트들을 넣으면 화면을 확대해도 가운데 정렬을 자동으로 한다~! 개꿀!출처 : 엘리스 아카데미