React에서 상태에 대해 이야기해야 합니다.

7463 단어 reactjavascriptwebdev
모든 사람은 프론트엔드의 큰 개를 강타할 기회를 좋아합니다 - React; 그러나 상태에 관해서는 정말 일류입니다!

상태에 대해 이야기하고 쉽게 관리할 수 있는 방법을 살펴보겠습니다.

리터럴 형태의 상태



첫째, 상태가 신청서에서 취할 수 있는 두 가지 형식을 이해하는 데 도움이 됩니다.

명시적 상태



현대 React의 경우 이것은 useStateuseReducer 입니다. 명시적 상태는 허공에서 나오는 것이 아니라 명시적으로 생성되고 관리되어야 합니다.

파생된 상태



일종의 유사 상태인 파생 상태는 하나 이상의 상태(명시적 또는 파생)를 처리한 결과입니다.

const [input, setInput] = useState(); // Explicit state
const inputValid = useMemo(           // Derived state
  () => input && input.length > 6,
  [input]
);


상태 유형 선택



명시적 또는 파생된 상태를 사용할지 여부를 아는 것이 어려울 수 있지만 정말 간단한 답이 있습니다.

Always use derived state where possible



위의 규칙을 지키지 않으면 중복 상태가 발생할 수 있습니다.

중복 코드와 달리 중복 상태는 실제로 존재하는 실제 문제입니다. 성능에서 유지 관리 가능성에 이르기까지 모든 것에 영향을 미칠 수 있습니다.

중복 발견



다음과 같은 것을 작성한 적이 있다면 - 나도 알고 있습니다 - 아마도 중복 상태를 생성한 죄를 범했을 것입니다.

const [value, setValue] = useState("");
const [isValid, setIsValid] = useState(false);

useEffect(
  () => setIsValid(value && value.length > 4), 
  [value]
);

useEffect 함수를 즉시 호출하는 setState 호출은 거의 항상 파생되어야 하는 상태의 예입니다.

그것은 세상에서 가장 나쁜 것처럼 보이지 않으며, 그 자체로 아마도 그렇지 않을 것입니다. 즉, 이 패턴이 존재한다면 많은 곳에 존재하고 더 큰 문제로 이어질 가능성이 높습니다.

useEffect 지옥



우리 중 대부분은 useEffect 지옥을 겪은 프로젝트에 참여했습니다. 한 가지 버그를 수정하려고 하지만 단일 상태 변경으로 인해 새로운 렌더링이 쏟아지기 때문에 추적할 수 없습니다.
useEffect가 있는 것은 상태 업데이트의 연속적인 수를 유발할 수 있다는 것입니다. 이는 차례로 후속 useEffect 호출을 유발할 수 있습니다. 이것은 함수 자체의 문제가 아니라 과도한 상태의 문제입니다.

상태 관리를 위한 팁



상태 관리에 대한 조언이 하나 있다면 최소한으로 유지하는 것입니다 ...하지만 조언은 하나뿐이므로 여기에 몇 가지가 더 있습니다!

배치 상태 업데이트



여러 상태 업데이트가 한 번에 호출되는 경우 이러한 업데이트를 하나의 호출로 일괄 처리하는 것이 유용합니다.


일괄 처리



const [{ fetching, data }, setState] = useState({ 
  fetching: true, 
  data: undefined 
});

useEffect(() => {
  (async () => {
    const data = await getData();
    setState({ fetching: false, data })
  })()
}, []);

// State 1: { fetching: true, data: undefined }
// State 2: { fetching: false, data: 1234 }




일괄 처리 없이



const [fetching, setFetching] = useState(true);
const [data, setData] = useState();

useEffect(() => {  
  (async () => {
    const data = await getData();
    setFetching(false);
    setData(data);
  })()
}, []);

// State 1: { fetching: true, data: undefined }
// State 2: { fetching: false, data: undefined } 
// State 3: { fetching: false, data: 1234 }


일괄 업데이트는 더 적은 수의 렌더링을 의미하는 것이 아니라 처리할 수 있는 상태가 더 적습니다. 테스트 및 재생산을 훨씬 간단하게 만듭니다.

Remember, fewer renders means fewer state changes



비품 사용



설비(또는 스토리)는 앱의 모든 상태를 이해, 모델링 및 문서화하기 위한 놀라운 도구입니다.

비품에 대해 자세히 알아보십시오.

useMemo를 더 자주 사용해 보세요.



놀랍네요.


바라건대, 당신이 이것을 흥미롭게 찾았습니다! 생각이나 의견이 있으면 언제든지 아래에 드롭하거나 트위터에서 저를 누르십시오 -

면책 조항: 이 기사에 표현된 모든 생각과 의견은 내 자신의 것입니다.

좋은 웹페이지 즐겨찾기