실제로 개발을 하면서 사용되는 문법들을 개발 시 사용하는 순서에 맞추어서 정리해 보았다. ui나 redux 사용 절차는 언제나 똑같기 때문에 숙지해두면 무조건 도움이 된다. 사실상 나를 위한 메모장..
useState / Component / 동적인 UI 만들기 / map( ) / props / <input> 태그 / import, export / Router / useEffect() /
AJAX, axios / Redux / 삼항연산자의 object , array 자료형 응용 / React-Query / useMemo
useState()
용도 : html에서 보여주어야 하는 내용 중, 자주 변경될 것 같은 것에 사용한다. state가 바뀌면 html은 자동으로 재렌더링된다.
▼ 사용법
1. import { useState() } from 'react'; 2. let [state이름, state변경함수] = useState('초깃값') 3. html에서 {state이름} 으로 호출 4. state변경함수('변경할값') 으로 state 상태 변경 6. ★ state가 array, object일 경우 state 값 변경하는 방법 // ...[1,2,3] => 1,2,3 . '...' 는 괄호 벗기기용 연산자. let copy = [...state이름] copy[0] = '바꿀 내용' state변경함수(copy) |
Component
용도 : 복잡한 html을 한 단어로 치환할 수 있게 해준다. 주로 재사용이 잦은 부분, 내용이 자주 변경될 것 같은 부분 등을 컴포넌트화 한다.
▼ 사용법
1. function 컴포넌트명() { return ( <div> </div> ) } 2. 컴포넌트를 사용할 곳에서 <컴포넌트명></컴포넌트명> 으로 호출. 3. arrow function으로도 생성 가능. let 컴포넌트명 = () => { return ( <div> </div> ) } 4. props, 또는 import 문을 통해 전달하면 다른 곳에서의 사용이 가능하다. |
동적인 UI 만들기
용도 : 클릭에 따라, 또는 상태에 따라 보였다가 보이지 않게 바뀌어야 하는 동적 UI를 만들 때 사용한다.
▼ 사용법
1. HTML, CSS로 디자인하기 2. UI의 현재 상태(보일지, 보이지 않을지) 의 상태를 state로 저장한다. let [ view, setView ] = useState(false) 3. state에 따라서 UI가 어떻게 보일지 작성한다. return ( { view ? <UI></UI> : <div> 보이지 않는 상태 </div> } ) |
map( )
용도 : 주로 array 자료의 개수에 따라 반복해서 html을 생성할 때 사용한다.
▼ 사용법
// content에는 array[i]에 담긴 내용이 들어있다. 1. array.map(function(contentArray,i) { return ( <div> {contentArray} </div> ) } |
props
용도 : 부모가 가지고 있는 컴포넌트를 자식이 사용하고 싶을 때 사용한다.
▼ 사용법
1. 부모 컴포넌트의 자식 컴포넌트가 사용되는 곳에서 <자식컴포넌트명 작명={state이름}/> 2. 자식 컴포넌트에서 파라미터에 props 등록 후 props.작명 으로 사용 ex) function App() { let [부모가가진state, setState] = useState() return ( <div> <Children 프롭스보냄={부모가가진state} /> </div> ) } function Children (props) { return ( <div>{props.프롭스보냄}</div> ) } |
<input> 태그
용도 : 사용자에게 내용을 입력받기 위해 사용한다.
▼ 사용법
1. 사용자가 입력한 내용을 onChange 메서드로 받아놓을 State를 만든다. 2. onChage에 e.target.value를 사용하여 setState로 사용자가 입력한 내용을 state에 저장할 수 있게 한다. function App (){ let [input, setInput] = useState('') return ( <input onChange={(e)=>{ setInput(e.target.value) console.log(input) }} /> ) } |
import, export
용도 : 길어진 코드를 export 하여 다른 js 파일에서 사용한다.
▼ 사용법
1. 사용할 컴포넌트를 export 한다. export default 컴포넌트명 2. 사용할 컴포넌트를 import 한다. import 컴포넌트명 from '경로' |
Router
용도 : 경로에 따라 각각 다른 js 파일을 보여준다. (페이지를 나눈다.)
▼ 사용법
1. 터미널에서 npm install react-router-dom@6 로 설치한다. 2. index.js 를 설정한다. import { BrowserRouter } from "react-router-dom";
<React.StrictMode> <BrowserRouter> <App /> </BrowserRouter> </React.StrictMode> 3. App.js에서 사용한다. <Route path="/" element={ <App/> } > 4. nested (서브경로) rotues는 아래와 같이 사용한다. /first/second 또는, /first/third로 방문했을 경우 최상위 부모 컴포넌트인 First 속 Outlet이 하위 경로 second, third의 element가 표시될 위치이다. <Route path="/first" element={ <First/> } > <Route path="second" element={ <div>fist 내부의 요소</div> } /> <Route path="third" element={ <div>second 내부의 요소</div> } /> </Route> function First(){ return ( <div> <h4>First 페이지입니다.</h4> <Outlet></Outlet> </div> ) } |
useEffect()
용도 : useEffect() 내부에 작성한 코드는 컴포넌트가 로드되거나 업데이트 될 때마다 실행되는데, html 렌더링 이후에 동작한다.
▼ 사용법
1. import {useEffect} from 'react'; 로 import 해온다. 2. useEffect(()=>{ console.log('컴포넌트가 로드되거나, 업데이트 될 때마다 실행됩니다.') console.log('또한 이곳의 모든 문장은 html렌더링 이후에 동작하며,') console.log('만일 아래의 파라미터에 변수를 넣으면 [ ] 내부의 변수 또는 state가 변할 때만 useEffect가 실행됩니다.') return () => { console.log('이곳에 있는 문장은 useEffect안의 코드 실행 전에 먼저 항상 실행됩니다.') console.log('만일 아래 파라미터를 작성하면 컴포넌트가 unmount될 때 1회 실행됩니다.') } },[파라미터여러개넣기가능]); |
AJAX, axios
용도 : API에 GET, POST 요청할 때 새로고침 없이 데이터를 주고받게 해 주는 기능.
▼ 사용법
1. XMLHttpRequest, fetch(), axios 중 하나 택해 사용. 2. axios는 라이브러리로 npm install axios로 설치 3. import axios from 'axios' 로 import 한다. 4. //get 요청 // result.data에 가져온 결과가 들어있다. axios.get('API경로').then( (result) => {console.log(result.data) }) .catch( () => { console.log('실패') }) //post요청 axios.post('API경로', {보낼자료:'document') 5. fetch 이용 fetch('URL').then(결과 => 결과.json()).then((결과) => { console.log(결과) } ) |
Redux
용도 : props 없이 state를 공유할 수 있게 도와주는 라이브러리. 모든 컴포넌트에서 사용할 수 있는 공통 state를 관리한다.
▼ 사용법
1. npm install @reduxjs/toolkit react-redux 로 라이브러리를 설치한다. 2. store.js 파일을 생성한다. 3. 아래 내용을 작성한다. import { configureStore } from '@reduxjs/toolkit' export default configureStore({ reducer: { } }) 4. index.js에 아래 내용을 작성한다. import { Provider } from "react-redux"; import store from './store.js' const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <React.StrictMode> <Provider store={store}> <BrowserRouter> <App /> </BrowserRouter> </Provider> </React.StrictMode> ); ex 사용 예시) store.js ------------------------------------------------------------------------------- import { configureStore, createSlice } from '@reduxjs/toolkit' let user = createSlice({ name : 'user', initialState : 'chalinuna', reducers : { //state를 변경할 수 있는 함수 changeName(state, action){ return state + action.payload //atcion.payload에는 '불러온 곳에서 받아온 값' 이 들어있다. } }) export default configureStore({ reducer: { user : user.reducer } }) export let { changeName } = user.actions 사용할 곳 ------------------------------------------------------------------------------- import { useDispatch, useSelector } from "react-redux" function Login(){ let name = useSelector((state) => { return state } ) let dispatch = useDispatch() console.log(name) //결과 : chalinuna return ( <div> <div> {name} </div> <button onClick={()=>{ dispatch(changeName('cat')) //Store에 저장된 user의 값이 chalinunacat 이 된다. }}>누르면 이름을 바꿉니다.</button> </div>) } |
삼항연산자의 object / array 자료형 응용
용도 : 경우에 따라서 다른 html 태그들을 보여주고 싶은 경우 사용한다.
▼ 사용법
function Component() { var select= 'A'; return ( <div> { { //중괄호 뒤에 붙은 [select] 에 담긴 값이 A면 첫줄, B면 둘째줄, C면 셋째줄을 실행한다. A: <p>A일때 보여줄 내용</p>, B: <p>B일때 보여줄 내용</p>, C: <p>C일때 보여줄 내용</p> }[select] } </div> ) } |
React-Query
용도 : 실시간으로 보여주는 데이터가 중요한 경우 사용한다.
▼ 사용법
1. npm install @tanstack/react-query 2. import { QueryClient, QueryClientProvider, useQuery } from '@tanstack/react-query' 3. useQuery(['이름짓기'] 로 사용한다. 4. index.js 파일을 수정한다. import { QueryClient, QueryClientProvider } from "react-query" const queryClient = new QueryClient() const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <QueryClientProvider client={queryClient}> <Provider store={store}> <BrowserRouter> <App /> </BrowserRouter> </Provider> </QueryClientProvider> ); 5. ajax를 위한 axios 요청 시 사용한다. function App () { let result = useQuery('이름짓기', () => axios.get('API경로') .then( (result) => {return result.data}) ) return( <div> // result에 ajax의 상태가 자동으로 저장되어있다. { result.isLoading && '로딩중입니다.' } { result.error&& '로딩중입니다.' } { result.data && result.data.name } </div> |
useMemo
용도 : useMemo 안의 문장은 컴포넌트 로드 시 1회만 실행한다. 따라서 재렌더링마다 불필요하게 반복할 필요 없는 문장을 작성할 수 있다.
▼ 사용법
1. import useMemo from 'react' 2. function repeat(){ return 반복문100번돌린결과 } function Cart(){ let result = useMemo(()=>{ return repeat() }, []) // 컴포넌트 로드 또는 [] 가 변할 때 1회만 실행된다. return ( <Child /> <button onClick={()=>{ setCount(count+1) }}> + </button> ) } |
'REACT > React-개념정리' 카테고리의 다른 글
[React] 모바일에서 100vh 맞추기 (0) | 2023.01.19 |
---|---|
[React] React Templates (0) | 2022.12.06 |
댓글