2023 05 09
2023-05-09¶
React¶
- 참고: https://www.youtube.com/playlist?list=PLZKTXPmaJk8J_fHAzPLH8CJ_HO_M33e7-
- 컴포넌트
- 비슷한 부분 코드 재사용
- JSX(JavaScript XML)
- class는 js예약어라 className
- {} 를 통해서 return 문 외부의 변수나, 간단한 연산들에 대한 결과를 HTML에 띄워줄 수 있음
- 다만 객체 정보등은 띄울수가 없음
- 리액트 CSS
component.module.css의 이름으로 컴포넌트의 종속된 css를 만들고,- component에서
import styles from './component.module.css'를 받아서 쓰며,- {styles.box} 를 통해 class 매핑해주면 뚝딱
- 컴포넌트에 이벤트 만들어주기
- 컴포넌트 리턴 전에 정의한 함수 매핑
- onClick 이벤트에 바로 그냥 함수
export default function Function() { function showName() { console.log("Joel") } function showAge(age) { console.log(age) } function showText(e) { console.log(e.target.value) } return ( <div> <h1>Hello</h1> <button onClick={showName}>Show name</button> <button onClick={() => { showAge(10) }}>showAge</button> <input type="text" onChange={showText}></input> </div> ) }
-
State
- 컴포넌트가 가진 속성값
- 이게 바뀌면 리액트가 화면 리액트가 바꿔줌
- 변수 != state
- useState를 임포트해오자. 해당 함수에 각각 [변수, 변수바꿀함수] 요렇게 정의해주자.
- 각 컴포넌트는 독립적인 state를 가지고 있음을 기억하자!
import { useState } from "react" export default function State() { const [name, setName] = useState("Joel") function changeName() { if (name === "Joel") { setName("Yewon") } else { setName("Joel") } } return ( <div> <h1>state</h1> <h2>{name}</h2> <button onClick={changeName}>Change</button> </div> ) }
-
Props
- Properties
- 상위 컴포넌트에서 하위 컴포넌트로 전달해주자.
- 상위
- 하위
- 받은대로만 사용할 것
- Read Only로 객체가 넘어옴
- 객체 자체가 그냥 {age: 30} 이런식으로 넘어오기에 구조 분해 할당할 수도 있음
- state와 props로 화면에 보여줄 정보를 처리하자
- 한 컴포넌트가 가진 state를 props로 (당연히) 넘길 수 있음
- 개발자가 해줄것은 데이터만 적절히 바꿔주는 것
- 컴포넌트는 알아서 렌더링을 다시 하고, 화면의 UI 정보는 갱신된다
-
JS 구조 분해 할당
- Destructing Assignment
- 배열이나 객체의 속성을 분해해서 그 값을 변수에 담을 수 있게 하는 표현식
-
[배열]
let users = ['Mike', 'Tom', 'Jane'] let [user1, user2, user3] = users; console.log(user1) // 'Mike' console.log(user2) // 'Tom' console.log(user3) // 'Jane'- 기본값 줄 수 있음
- 일부 반환값을 무시할 수도 있음
- 배열 내 원소 swap도 쉽게 구현이 가능해지는 이점
- [객체]
- 객체 구조 분해
let user = {name : 'Mike', age : 30} let {name, age} = user; let {age, name} = user; let {name: userName, age: userAge} = user; let {name, age, gender = 'male'} = user; console.log(name); // 'Mike' console.log(age); // 30 console.log(userName); //'Mike' console.log(userAge); // 30 console.log(gender); // 'male'
- 객체 구조 분해
- React Hook!
- React 16.8 부터 사용가능
- useState()
- 상태값, 상태변화함수 뚝딱 정의하여 컴포넌트 안에서 휘뚜루마뚜루 변수 상태관리하자
- useEffect()
- 어떤 상태값이 바뀌었을 때 동작하는 함수를 작성할 수 있음
- 함수를 매개변수로 넘겨줄 수 있다
- 이런걸로 API call 해도 되겠지?
-
useEffect()
- 어떤 상태값이 바뀌었을 때 동작하는 함수를 작성할 수 있음
- 첫 매개변수로 함수를 넣어주세요
- 이게 근데 onClick으로 박아둔 함수 실행될때마다 무한정 동작할 수 있어
- 따라서 의존성 배열을 통해서, 해당 배열 안에 담긴 변수가 바뀔 때만 동작하도록 구동을 해볼 수 있다
- useEffect() 렌더링 최초에 한번만 하고 싶다면, 의존성 배열에 [] 빈배열을 넣어두자
- Custom Hooks
- 반복적인 코드에 대해서 customHook을 만들어서 처리해보자!
export default function Day() { const { day } = useParams(); const words = useFetch("https://url"); } export default function useFetch(url) { const [data, setData] = useState([]); useEffect(() => { fetch(url) .then(res => { return res.json(); }) .then(data => { setData(data); }); }, [url]) return data; }
- 반복적인 코드에 대해서 customHook을 만들어서 처리해보자!