: Document Object Model의 약자로 문서 객체 모델을 의미
: Real Dom의 복사본이며, 실제 DOM 객체처럼 직접 접근하여 조작하는 것은 안되지만 이 가상 DOM에 접근하여 어떤 변화가 있는지 확인
: Key는 React가 어떤 항목을 변경, 추가 또는 삭제할지 식별을 하기 위해 사용
index
를 key로 사용하기도 하지만 항목의 순서가 바뀔 수 있는 경우 key에 인덱스를 사용하는 것은 권장하지 않음: 특정 값(value)을 재사용하고자 할 때 사용하는 Hook
📍 Memoization이란?
기존에 수행한 연사의 견과 값을 메모리에 저장을 해두고, 동일한 입력이 들어오면 재활용하는 프로그램이 기법
-> 중복 연산을 할 필요가 없어지니깐 앱의 성능 최적화할 수 있음
: 함수의 재사용을 위해 사용하는 Hook
: 개발자가 스스로 커스텀한 훅을 의미하여 이를 이용해서 반복되는 로직을 함수로 뽑아내어 재사용이 가능
App.js
import { useInput } from './useInput'
import './App.css'
// 확인 버튼을 누를시 나타는 alert창 함수
function displayMessage(message) {
alert(message)
}
function App() {
const [inputValue, handleChange, handleSubmit] = useInput('', displayMessage )
return (
<div>
<h1>useInput</h1>
<input value={inputValue} onChange={handleChange}/>
<button onClick={handleSubmit}>확인</button>
</div>
);
}
export default App;
useInpust.js
import { useState } from "react";
// input의 초기값을 매개변수로 줌
export function useInput (initialValue, submiAction) {
const [inputValue, setInputValue] = useState(initialValue);
const handleChange = (e) => {
setInputValue(e.target.value);
};
const handleSubmit = () => {
// 확인 버튼을 누르면 input에 빈 문자열로 해주고
// input을 초기값(initialValue)로 해줘
setInputValue('');
submiAction(inputValue);
}
return [inputValue, handleChange, handleSubmit];
}
App.js
import "./styles.css";
import useFetchData from "./util/hooks";
export default function App() {
const data = useFetchData();
return (
<div className="App">
<h1>To do List</h1>
<div className="todo-list">
{data &&
data.todo.map((el) => {
return <li key={el.id}>{el.todo}</li>;
})}
</div>
</div>
);
}
hooks.js
import { useEffect, useState } from "react";
const useFetchData = () => {
const [data, setData] = useState();
useEffect(() => {
fetch("data.json", {
headers: {
"Content-Type": "application/json",
Accept: "application/json"
}
})
.then((response) => {
return response.json();
})
.then((myJson) => {
setData(myJson);
})
.catch((error) => {
console.log(error);
});
}, []);
return data;
};
export default useFetchData;
훌륭한 글이네요. 감사합니다.