이전에 React로 개발한 사무소 웹 페이지를 Refactoring 하기 위해, 새로 React 강의를 찾게 되었다!
Udemy의 react 완벽 가이드 with redux next.js typescript 강의인데, 인터넷에서 평도 좋고 내가 원하는 hooks, 상태 관리 등의 심화 개념까지 다루고 있어 수강하게 되었다. (가격도 저렴한 게 좋았다!)
강의를 전반적으로 살펴보고, 내가 이전에 미처 발견하지 못했던 내용들을 정리해 간단히 공유하고자 한다.
function myFunction(a) {
console.log(a);
}
// 매개변수가 한개인 경우, 괄호는 생력가능하다.
const myFunction = a => {
console.log(a)
}
// return문을 깔끔히 작성할 수 있다.
const sumNum = (a, b) => a + b;
// default로 내보낸 경우, 자동으로 컴포넌트를 불러온다.
// 컴포넌트의 이름을 자유롭게 수정할 수 있다.
export default Person
...
import Person from Person
import prs from Person
// 그냥 내보낸 경우, 사용자가 직접 중괄호로 불러올 대상을 지정해야 한다.
// 컴포넌트의 이름을 수정하려면, as를 사용해야 한다.
export const Person
...
import {Person as prs} from Person
// spread 연산자(...)를 사용하면 기존 배열의 값을 복사할 수 있다.
const oldArray = [1, 2, 3];
const newArray = [...oldArray, 4, 5]; // [1, 2, 3, 4, 5]
// 오브젝트도 가능하며, 만약 중복된 key를 추가로 선언하면 기존 값을 덮어씌운다.
const oldObj = {a: 1, b: 2};
const newObj = {...oldObj, b: 3}; // {a: 1, b: 3}
// 배열 객체의 원소 값을, 각각에 변수에 할당할 수 있다.
[a, b] = ['hello', 'heebeom'];
console.log(a); // hello
console.log(b); // heebeom
// 중간을 건너띄고 싶으면, 콤마(,)를 이용하면 된다.
[num, , num3] = [1, 2, 3];
console.log(num3); // 3
const Person = {name: 'heebeom', age: 26};
const PersonCopy = Person;
Person.name = 'max';
// PersonCopy가 Person을 참조하기 때문에, name이 같이 바뀌어버렸다.
// 이를 방지하려면, 스프레드를 사용해 배열을 복사해야 한다.
console.log(PersonCopy.name) // max
const [userInput, setUserInput] = useState({
enteredTitle: '',
enteredDate: '',
})
setUserInput((prevState) => {prevState..., enteredTitle: 'good'})
const dataHandler = (data) => {
const myData = data;
console.log(myData);
}
<!-- 꼭, handler 함수에 '포인터'를 보내자! -->
<ChildCompnent handler={dataHandler}>
<div>
<div>
<div>
... <!-- 쓸데 없는 div가 너무 많다! -->
...
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="modal-root"></div> <!-- modal이 이동할 장소 -->
<div id="root"></div>
...
import ReactDOM from 'react-dom';
...
const ErrorModal = (props) => {
return (
<>
{ReactDOM.createPortal(
<ModalOverlay />, // 이동할 대상을 지정한다. 여기선 모달임
document.getElementById('backdrop-root')) // 이동시킬 장소를 지정한다.
};
</>
);
};