[21-1] 컴포넌트와 props, data, prev,el,graphql-variables의 실체
[21-2] rest-api의 문제점과 endpoint
[21-3] graphql과 rest-api의 관계
[21-4] 글로벌 스테이트
📂 함수 기본
// 함수의 선언 const func1 = (param)=>{ console.log(param) } // 함수의 실행 func1(argu) // 결과 // param.argu
// 함수의 선언 const func2 = (param) => { console.log(param.count) } // 함수의 실행 func2({count : 123}) // 결과 // 123
📂 props
📂 el
함수의 선언
const getProfile = (aaa,bbb)=>( console.log(`${aaa}는 ${bbb}입니다.`) )
함수의 실행
getPrfile("훈이",2) // <----실행 결과-----> // 훈이는 2입니다.
map_1
["철수","영희","훈이"].map((el,index)=>(console.log(`${el}는 ${index}번째 입니다.`))) // <----실행 결과-----> // (”철수”,0) (”영희”,1) (”훈이”,2)
map_2
["철수","영희","훈이"].map((index)=>(console.log(`${index}는 무엇일까요?`))) // <----실행 결과-----> // (”철수”) (”영희”) (”훈이”)
📂 prev
setCount(prev => prev+1)
setCount((prev)=>{return prev+1})
📂 graphql-variables
const CREATE_BOARD = gql` mutation createBoard($writer: String){ createBoard(writer: $writer){ _id } } `
endpoint
: API가 서버에서 리소스에 접근할 수 있도록 가능하게 하는 URL
rest-api 에서는 post
, get
, put
, delete
, update
방식만해도 이미 endpoint가 5개가 생성되기 때문에 이외의 endpoint를 추가하게 되면 상당히 많은양의 endpoint가 생기게 된다.
📂 오버페칭
graphql
: api 요청이후 결과값으로 필요한것만 받아오게 된다.rest-api
: 결과값을 모두 받아오게 된다.📂 언더페칭
rest-api
: endpoint에 body를 넣어 보내기 때문에 하나의 endpoint에 하나의 body만 들어가게 된다.graphql
과는 다르게 rest-api
는 한번에 하나의 api만을 요청할 수 있다.rest-api
의 위와 같은 문제점을 개선하기 위해 나온 것이 바로 graphql
다.graphql
: post방식의 body에 내가 실행시킬 함수의 이름을 적어서 endpoint를 요청한다.글로벌 스테이트
: 여러컴포넌트에 사용되는 state전역상태관리(global state) 툴
: context-Api, Redux, Recoil📂 fetchPolicy
fetchPolicy에는 여러가지 기능
cache-first
: default → 캐시에 있는지 먼저 확인network-only
: → 캐시에 있든 없든 무조건 백엔드에 요청📂 Recoil
Recoil 설치
npm install recoil
을 입력yarn add recoil
을 입력Recoil 세팅
app.tsx
//app.tsx 파일 import { RecoilRoot, atom, selector, useRecoilState, useRecoilValue, } from 'recoil'; function App() { return ( <RecoilRoot> //RecoilRoot로 모든 컴포넌트를 묶어주세요 <Component /> </RecoilRoot> ); }
Recoil 사용
atom
을 참조하는 모든 컴포넌트에서 리렌더링이 일어난다.// Atom const textState = atom({ key: 'textState', // state의 이름 default: '', //초기값 });
// TextInput 컴포넌트 function TextInput() { const [text, setText] = useRecoilState(textState); const onChange = (event) => { setText(event.target.value); }; return ( <div> <input type="text" value={text} onChange={onChange} /> <br /> Echo: {text} </div> ); }