TIL

24. 05. 22 TIL

효ㄷi 2024. 5. 22. 11:20
더보기

일찍 잤는데도 잠이,,, 온다,,, 정신 차릴 겸

동숲 브금을 들으면서(?) 간단하게 리액트 정리.

1.

css를 사용할 때는 className을 사용한다.

 

2.

자바스크립트 변수 등을 사용할 때는 중괄호를 사용한다.

 

3.

중요한 데이터를 저장할 때는 변수 대신 state를 사용한다.

첫 줄에 import {useState} from 'react' 작성,

원하는 곳에 useState('보관할 자료')를 작성하면 자료를 저장할 수 있다.

사용하기 위해서는 let [data, setData] = useState('') 이런 식으로 쓰면 된다.

let 뒤에 문법은 destructuring 문법으로, array 안의 데이터들을 변수로 쉽게 저장하기 싶을 때 사용한다.

변수 대신 state에 저장해 사용하는 이유는, state는 변동이 생기면 state를 사용하는 html을 자동으로 재렌더링해주기 때문이다.

 

4. 

state 변경을 위해서는 아까 만든  let [data, setData] = useState('') 에서 setData로 만드는데, setData('newData') 이런 식으로 만들면 된다. 소괄호 안에 넣은 걸로 state를 바꿔준다.

 

5. 

onClick은 함수를 넣어야 잘 동작한다. (함수명을 적거나 함수를 안에서 바로 만들어주기)

<div onClick = { ()=> { 실행 코드 } }>

function 함수명 () { }

 

6.

리액트에서 array, object state를 수정, 변경하고 싶을 때는 독립적인 복사본을 만들어 수정하는 것이 좋다.

그때는 스프레드 연산자를 사용한다.

 

7.

jsx 파일에서 html 코드를 짤 때 반드시 하나의 태그로 시작해, 하나의 태그로 끝이 나야 한다. 그래서 또 div 태그를 싸용해서 감싸줘야 하는데, 그냥 <> </> 이렇게 fragment 문법을 사용해 감싸줘도 된다.

 

8. 

긴 html을 한 단어로 줄여서 넣을 수 있는 문법을 컴포넌트라고 한다.

컴포넌트는 함수를 하나 만들어 return 안에 html을 담은 후 원하는 곳에 <함수명/>을 사용한다.

컴포넌트는 대문자로 만들고, function App(){} 내부에 만들지 않는다.

 

function Data() { return (~~) }

let Data = () => { return (~~) } 로 만들어도 된다.

 

9.

반복문 for 대신 map을 사용한다.

map은 array에 있는 자료 갯수만큼 코드를 반복 실행해준다.

또 콜백함수에 파라미터를 아무렇게나 넣으면 array 안의 모든 자료를 하나씩 출력해준다.

그리고 return 옆에 작성한 것을 array로 담아준다.

그런데 map 반복문으로 생성한 html엔 key={}를 넣어줘야 리액트가 각 div들을 구분할 수 있다.

 

10.

자식 컴포넌트가 부모 컴포넌트에 있던 state를 사용하고 싶다면 props로 전송해서 사용한다.

자식 컴포넌트를 사용하는 곳에서 <자식 컴포넌트 작명 = {state 이름}/>,

자식 컴포넌트를 만드는 function으로 가서 props라는 파라미터 등록 후 props.작명으로 사용하면 된다.

 

11. 

input에 무언가 입력했을 때 코드를 실행하고 싶다면 onChange, onInput을 사용한다.

이것들은 유저가 입력할 때마다 코드를 실행해준다.

입력한 값을 가져오고 싶다면 event 파라미터를 추가해 event.target.value라고 적으면

input에 입력된 값을 가져올 수 있다.

 

12.

export default 변수명; 이런 식으로 작성하면 원하는 변수를 밖으로 내보낼 수 있다.

export한 변수를 다른 파일에서 사용하고 싶다면 import 작명 from './경로' 하면 된다.

파일마다 export default라는 키워드는 하나만 사용할 수 있다.

여러 개의 변수들을 내보내고 싶다면 export { ~, ~ } 이 문법을 사용하면 된다.

그리고 import로 import { ~, ~ } from './경로' 이렇게 받아오면 된다.

 

13.

styled-component를 사용하면 컴포넌트를 만들 때 스타일을 미리 주입해서 만들수 있다.

div를 만들고 싶다면 let box = styled.div`` 이렇게 만들어 백틱 안에 스타일을 넣으면 된다.

 

14.

컴포넌트는 lifecycle 이라는 개념이 있다.

페이지에 장착되기도 하고 (mount), 업데이트도 되며 (update), 제거도 된다. (unmount)

근데 이 중간중간 특정 코드를 실행 할 수 있다. 

 

요즘은 상단에서 useEffect를 import 해와서

useEffect(() => { 컴포넌트 로드 & 업데이트 마다 실행되는 코드 }) 이런 식으로 작성하면 된다.

저 내부에 있는 코드는 html 렌더링 이후에 동작하는데,

원래는 반복문을 실행하고 html을 보여준다고 하면  useEffect 안에 적으면 html을 먼저 보여주고 반복문을 돌린다.

 

또한, useEffect의 두 번째 파라미터로 []를 넣을 수 있다.

여기엔 변수, state 등을 넣을 수 있는데, 대괄호 내부에 변수, state가 변할 때만 useEffect 안의 코드가 실행된다.

아무것도 넣지 않으면 컴포넌트 로드시 한 번만 실행하고 끝난다.

useEffect 동작 전에 특정 코드를 실행하고 싶다면 return () => {} 안에 넣으면 된다.

 

15.

props를 여러 번 전송해줘야 하는 귀찮은 상황일 때는 context API 문법이나, Redux 외부 라이브러리를 사용하면 된다.

 

context API는 일단 context를 하나 만들어줘야 한다. (state 보관함)

export let context 1 = React.createcontext();

 

이 context 1로 원하는 곳을 감싸서 공유를 원하는 state를 value 안에 적으면 된다.

<context1.provider value= { {공유, 원함} } >

  <Detail 감쌈 = {감쌈}/>

</context1.provider>

그럼 context1로 감싼 모든 컴포넌트와 그 자식 컴포넌트는 props 전송 없이 사용 가능하다.

 

이제 사용은 이 context를 import 해와서 useContext() 안에 넣는다.

import {context1} from './경로'

 

let {공유} = useContext(context1)

이것보다 redux를 많이 사용한다고 한다.

더보기

출처, 참고

코딩애플