✨
Saltberry
GithubLinkedIn
  • 개요 Overview
  • 📝HTML/CSS
    • 구조 HTML
    • 스타일 CSS
      • z-index
  • 📦개발 Development
    • 개발 Implementation
    • 단어 Glosarry
    • 깃 Git
    • 해시 Hash
    • 노드 패키지 매니저 Node Package Manager
    • 브라우저 랜더링 Browser Rendering Process
    • 교차 출처 리소스 공유 CORS
    • 인터프리터 Interpreter
    • Object-oriented programming(OOP) 객체지향 프로그래밍
  • 💡CS 50
    • Computational Thinking
  • ✨자바스크립트 Javascript
    • 자바스크립트란 What is JavaScript
    • 표현식과 문 Expression Statement
    • 변수 Variable
    • 함수 Function
    • 참과 거짓 값 Truth Falsy
    • 배열 Array
    • Import Export
    • 스택과 큐 Stack Queue
    • 문서객체모델 Document Object Model
      • 개요 Overview
      • 도큐먼트 Document
      • HTMLCollection
      • getMethod
      • NodeList
      • childNodes, children
      • Event
      • live, static
      • Element
      • DOM Token
      • 속성 attribute
      • implementation
      • 노드 Node
      • HTMLElement
    • 브라우저 저장소 Cookie Web Storage
  • 🎁리액트 React
    • 리액트 톧아보기 Overview
    • Intro
      • 상태의 불변성 State Immutability
      • Props and State
      • Hooks
    • Concepts
  • 🚦타입스크립트 Typescript
    • Page 1
  • 🗃️리덕스 Redux
    • 왜 리덕스를 사용할까 Why Redux
    • 플럭스 Flux
  • 📬넥스트 Nextjs
    • Pages
  • ✅면접 Interview
    • Index
    • Implement experiences
    • Best practice for query parameter and fetch
  • 🚀TECH
    • Lists
    • Zustand
  • 🧬Algorithm
    • Types of algorithms
    • 이진수 변환 Binary Number
    • 후위 연산자 Postfix expression
    • 선택 정렬 Selection Sort
    • Find longest substring without repeating characters
    • 올바른 괄호 Valid Parentheses
  • 📔Mathematics
    • 다항식 Polynomial
  • 🗂️Database
    • 데이터베이스 Database
  • 📝Class
    • 자료구조 Data Structure
      • 배열 Array
    • C++ 프로그래밍
      • C++ 기초
    • 소프트웨어 공학 Software engineering
      • 소프트웨어 개요 Software overview
      • 소프트웨어 프로세스 Software process
    • 자바 Java
      • 자바와 객체지향 프로그래밍 Java and OOP(Object-oriented programming)
  • Java
    • 자바가 뭐지?
  • CA EI
    • CA EI
Powered by GitBook
On this page
  • 필터 이용 시 쿼리 파라미터를 같이 변경해줘야해?
  • 어떻게 데이터 fetch를 하는게 좋을까?
  1. 면접 Interview

Best practice for query parameter and fetch

쿼리 파라미터와 데이터 가져오기에 대한 고찰

필터 이용 시 쿼리 파라미터를 같이 변경해줘야해?

상태를 기준으로 할지 쿼리 파라미터를 기준으로 데이터를 fetch할지 고민하다가 문득 쿼리도 업데이트 해야하나? 라는 생각이 들어 고민해보았다. 프로덕트 요구사항에 따라 달라질 수 있으나, 일반적인 커머스 필터 UX를 고려하여 접근해본다면 크게 다음과 같은 사용자 경험을 제공할 수 있을 것이다.

  • 보고 있는 데이터 공유 및 북마크

  • 앞/뒤로가기로 쉽게 원하는 것을 찾을 수 있음

커머스 도메인에서는 고객이 쉽게 상품을 찾는게 중요하기 때문에 빠르게 상품에 접근하고 계속 탐색을 이어나갈 수 있는 경험을 유지하는 것이 중요하다.

어떻게 데이터 fetch를 하는게 좋을까?

// AC

1. 상태가 변경될 때 마다 데이터 fetch
2. 쿼리가 변경될 때 마다 데이터 fetch

1번 커먼 유즈케이스

// state update
// data fetch
// query parameter update

const [params, setParams] = useState('all');

useEffect(() => {
    // data fetch with params
    // query update
}, [params])

유저가 이벤트를 발생시키면 상태가 변경되고 데이터를 fetch 한 후에 쿼리를 변경시킨다.

만약 쿼리가 먼저 변경된다면 다음과 같은 문제점이 발생할 수 있기에 데이터를 먼저 fetch 하는 것이 좋은 UX라 생각된다. 데이터 fetch 시 에러가 발생해도 쿼리를 먼저 변경하지 않기 때문에 화면의 갭을 줄일 수 있다.

  • 데이터 fetch 중 쿼리가 변경 될 수 있음

  • 데이터 로딩으로 인한 변경되어야 할 화면과의 갭 발생

2번 쿼리가 변경될 때 마다 데이터 fetch

// query parameter update
// state update
// data fetch

const [state, setState] = useState('all');
const { search } = useLocation();

useEffect(() => {
    // get query parameter
    // state update
}, [search])

useEffect(() => {
    // data fetch with params
    // query update
}, [state])

쿼리가 변경될 때마다 상태를 업데이트하고 상태가 바뀔때마다 데이터를 fetch하는 방법으로 생각했으나 무한루프에 걸려 결국에 문제가 발생한다.

const [state, setState] = useState('all');
const componentMounted = useRef(false);

useEffect(() => {
    if(componentMounted.current) {
        // data fetch with params
        // query update
    }
}, [state])

useEffect(() => {
    // get query parameter
    // state update
    componentMounted.current = true;
}, [])

처음 랜더링될 때 useEffect가 실행되면서 ref가 false이기 때문에 실행되지 않는다. 두번째 useEffect가 실행되면서 쿼리를 가져와 상태를 업데이트 한다. 이후 componentMounted 가 true로 변한다. state가 변경되었기 때문에 첫번째 useEffect가 실행되면서 데이터 fetch 후 쿼리를 업데이트 한다.

Last updated 1 year ago

✅