상태란 주어진 시간에 대해 시스템을 나타내는 것으로 언제든지 변경될 수 있음.
즉 문자열, 배열 객체 등의 형태로 응용 프로그램에 저장된 데이터
사앹를 관리하는 방법에 대한 것
프로덕트가 커짐에 따라 어려움도 커짐
상태들은 시간에 따라 변화함
React에서는 단방향 바인딩이므로 Props Driling 이슈도 존재
Redux와 MobX 같은 라이브러리를 활용해 해결하기도 함.
Client State와 Server State
Key Point는 데이터의 Ownership이 있는 곳
"Ownership"
데이터의 소유권을 가진 곳은 해당 데이터를 생성하거나 할당한 곳을 의미합니다.
이는 주로 변수, 객체, 또는 메모리와 같은 자원에 대한 소유권을 말합니다.
데이터의 소유권이 있는 곳은 데이터에 대한 제어 권한을 가지며, 데이터를 수정하거나 삭제할 수 있습니다.
또한 데이터를 공유하거나 전달할 때 소유권을 잃을 수 있습니다.
이 개념은 프로그래밍에서 중요한데, 특히 메모리 관리와 관련하여 데이터의 소유권을 명확히 하는 것이 메모리 누수나 데이터 오염과 같은 문제를 방지하는데 도움이 됩니다.
예를 들어 동적으로 할당된 메모리를 사용하는 경우 해당 메모리 블록의 소유권이 누구에게 있는지 추적하여 적절한 시점에 메모리를 해제해야합니다.
Ownership이 client에 있다.
Ownership이 Server에 있다.
import {QueryClient, QueryClientProvider} from 'react-query'
const queryClient = new QueryClient()
function App(){
return <QueryClientProvider client={queryclient}> ... </QueryClientProvider>
세 가지 core 컨셉 살펴보기
-Queries
-Mutations
-Query Invalidation
CRUD 중 Reading에만 사용할 것, Queries는 데이터 Fetching용
import {useQuery} from 'react-query'
function App() {
const info = useQuery('Query Key', Query Funcrtion)
}
//string 형태
useQuery('todos', ...) //queryKey === ['todos']
//Array 형태
useQuery(['todos',5], ... ) //queryKey === ['todos',5]
useQuery(['todos',5,{preview:true}],...) // queryKey ===['todos',5,{ preview: true}]
Data Fetching 할 때 Promise 함수 만들죠?
useQuery('fetchOrder',() => fetchOrder(orderNo),option)
CRUD 중 Create / Update / Delete 에 모두 사용
Mutations는 데이터 생성 / 수정 / 삭제 용
const mutation = useMutation(newTodo => {
return axios.post('/todos', newTodo)
});
useQuery 보다 더 심플하게 Promise 반환 함수만 있어도 된다.
(단, Query Key 넣어주면 devtools 에서 볼 수 있다.)
//Invalidate every query in the cache
queryClient.invalidateQueries()
//Invalidate every query with a key that starts with 'todos'
queryClient.invaldateQueries('todos')
참고
https://velog.io/@godud2604/React-Query%EC%99%80-%EC%83%81%ED%83%9C%EA%B4%80%EB%A6%AC