- 함수 호출 방식
console.clear();
// 예시 1
function a(index) {
console.log(`a 실행 됨, index : ${index}`);
}
// 예시 2
// function b(){
// a();
// }
// 예시 3
// const b = function(){
// a();
// }
// 예시 4
// const b = () => {
// a();
// }
const index = 2;
const b = () => {
a(index);
};
const c = a;
b();
c();
- c()에 인자값 안넘겨줘서 "a 실행 됨, index : undefined"로 나와
- 컴포넌트 분리
console.clear();
import React, { useState } from "https://cdn.skypack.dev/react@18";
import ReactDOM from "https://cdn.skypack.dev/react-dom@18";
const NumberRecorderForm = ({ num, setNum, saveNumber, clearNumbers }) => {
return (
<>
<div>
<span>숫자 : {num}</span>
<button onClick={() => setNum(0)}>취소</button>
</div>
<div>
<button onClick={() => setNum(num + 1)}>증가</button>
<button onClick={() => setNum(num - 1)}>감소</button>
<button onClick={saveNumber}>기록</button>
<button onClick={clearNumbers}>전체기록삭제</button>
</div>
</>
);
};
const NumberRecorderList = ({ recordNums, removeNumber }) => {
return (
<>
<div>
{recordNums.length == 0 ? (
<span>기록 없음</span>
) : (
<>
<h5>기록</h5>
<ul>
{recordNums.map((recordNum, index) => (
<li key={index}>
<span>
{index + 1}번 : {recordNum}
</span>
<button onClick={() => removeNumber(index)}>삭제</button>
</li>
))}
</ul>
</>
)}
</div>
</>
);
};
const App = () => {
const [num, setNum] = useState(0);
const [recordNums, setRecordNums] = useState([10, 20, 30]);
const saveNumber = () => {
setNum(0);
setRecordNums([...recordNums, num]);
};
const removeNumber = (index) => {
setRecordNums(recordNums.filter((_, _index) => _index != index));
};
const clearNumbers = () => {
setRecordNums([]);
};
return (
<>
<NumberRecorderForm
num={num}
setNum={setNum}
saveNumber={saveNumber}
clearNumbers={clearNumbers}
/>
<NumberRecorderList recordNums={recordNums} removeNumber={removeNumber} />
</>
);
};
ReactDOM.render(<App />, document.getElementById("root"));
- App 안의 return 값 메서드를 분리 시킴 (컴포넌트 단위로 분리)
- NumberRecorderForm, NumberRecorderList를 return에 보내주고 인자를 넘겨줘! (num = {num} · · · )
- 컴포넌트 분리2
console.clear();
import React, { useState } from "https://cdn.skypack.dev/react@18";
import ReactDOM from "https://cdn.skypack.dev/react-dom@18";
const NumberRecorderForm = ({ num, setNum, saveNumber, clearNumbers }) => {
return (
<>
<div>
<span>숫자 : {num}</span>
<button onClick={() => setNum(0)}>취소</button>
</div>
<div>
<button onClick={() => setNum(num + 1)}>증가</button>
<button onClick={() => setNum(num - 1)}>감소</button>
<button onClick={saveNumber}>기록</button>
<button onClick={clearNumbers}>전체기록삭제</button>
</div>
</>
);
};
const NumberRecorderList = ({ recordNums, removeNumber }) => {
return (
<>
<div>
{recordNums.length == 0 ? (
<span>기록 없음</span>
) : (
<>
<h5>기록</h5>
<ul>
{recordNums.map((number, index) => (
<NumberRecorderListItem
key={index}
number={number}
index={index}
removeNumber={removeNumber}
/>
))}
</ul>
</>
)}
</div>
</>
);
};
const NumberRecorderListItem = ({index, number, removeNumber}) => {
return (
<>
<li>
<span>
{index + 1}번 : {number}
</span>
<button onClick={() => removeNumber(index)}>삭제</button>
</li>
</>
);
};
const App = () => {
const [num, setNum] = useState(0);
const [recordNums, setRecordNums] = useState([10, 20, 30]);
const saveNumber = () => {
setNum(0);
setRecordNums([...recordNums, num]);
};
const removeNumber = (index) => {
setRecordNums(recordNums.filter((_, _index) => _index != index));
};
const clearNumbers = () => {
setRecordNums([]);
};
return (
<>
<NumberRecorderForm
num={num}
setNum={setNum}
saveNumber={saveNumber}
clearNumbers={clearNumbers}
/>
<NumberRecorderList recordNums={recordNums} removeNumber={removeNumber} />
</>
);
};
ReactDOM.render(<App />, document.getElementById("root"));
- NumberRecorderListItem 추가
'JavaScript > React' 카테고리의 다른 글
React - 일반모드, 토글모드 (1) | 2024.03.23 |
---|---|
React - 함수 분리, 매개변수 (0) | 2024.03.23 |
React - 리스트 출력, 아이템 삭제 (0) | 2024.03.21 |
React - 기록, map, 배열 (0) | 2024.03.20 |
React - 뷰 갱신 원리 (0) | 2024.03.20 |