μλν° μμ μλ‘μ΄ κΈ°λ₯μ μΆκ°νλ μν½μ μμνκ² λλ©΄μ λλκ·Έ, ν
μ€νΈ μ
λ ₯, μ€ν
νΌλ‘ attr κ°μ μ
λ°μ΄νΈν μ μλ κΈ°λ₯μ κ°λ°νκ² λμλ€. κΈ°λ₯ νΉμ±μ μν λ³νκ° μμ£Ό λ°μνκΈ° λλ¬Έμ, React DevToolsμ Highlight updates μ΅μ
μ νμ±νν μνλ‘ κ΄μ°°νλ©° κ°λ°μ μ§ννλλ°, μ€ν¬λ‘€μ΄λ νΉμ μν λ³κ²½μ΄ λ°μν λλ§λ€ λͺ¨λ μ‘ν°λΉν° λΈλ‘μ΄ λμμ 리λ λλ§ λλ νμμ λ°κ²¬νλ€.
( μλν°λ κ° μ‘ν°λΉν°λ§λ€ νλμ© λ λλ§ λλ©°, μ 체 μ‘ν°λΉν°κ° 리μ€νΈ ννλ‘ κ΅¬μ±λμ΄ μλ€. κΈ°λ₯μ μΌλ‘λ νΉμ μ‘ν°λΉν° νλλ§ μμ λλ μν©μ΄μμμλ 리μ€νΈμ ν¬ν¨λ λͺ¨λ μλν°κ° ν¨κ» 리λ λλ§ λκ³ μμλ€.)
μ²μμλ λ΄κ° μΆκ°ν κΈ°λ₯μμ λ°μν λ¬Έμ λΌκ³ μκ°νμ§λ§, κ΄λ ¨λ λ‘μ§μ νλμ© μ κ±°ν΄λ³΄λ©° νμΈν κ²°κ³Ό, ν΄λΉ μ΄μλ μ΄λ―Έ κΈ°μ‘΄λΆν° μ‘΄μ¬νλ λ¬Έμ μλ€. μ΄κΈ°ν μμ μ μ€νλλ μν λ¨Έμ λ‘μ§μ΄ μ 체 리λ λλ§μ μ λ°νκ³ μμκ³ , μ΄ λΆλΆμ ν΄κ²°νκΈ° μν΄ λ΄λΆ ꡬ쑰λ₯Ό μ΄ν΄λ³΄κΈ° μμνλ€.
π useMachine → useInterpret μ ν
useEffect(() => {
service.send({
type: 'INIT',
payload: {
items,
focusItemId,
},
});
}, [items, focusItemId]);
ν΄λΉ INIT μ‘μ
μ contextλ₯Ό μ¬μ€μ νλ λμμ ν¬ν¨νκ³ μμκ³ , μ΄ contextμ λ³νκ° κ΅¬λ
μ€μΈ λͺ¨λ λΈλ‘μ μν₯μ μ£Όλ©΄μ μ 체 리λ λλ§μ΄ λ°μνλ€.
νμμκ² μ΄ λ¬Έμ λ₯Ό 곡μ νλ μ€, useInterpretλ₯Ό νμ©νλ©΄ 리λ λλ§ μ μ΄μ μ 리νλ€λ μ‘°μΈμ λ€μκ³ , ν΄λΉ λ°©ν₯μΌλ‘ λ€λ₯Έ νμλΆκ³Ό ν¨κ» 리ν©ν°λ§μ μ§ννκ² λμλ€. 곡μ λ¬Έμμμλ λ ν
μ μ°¨μ΄λ₯Ό μλμ κ°μ΄ μ€λͺ
νκ³ μλ€.
useMachine automatically subscribes to the current state of the machine, which means every state update will result in a re-render of the component that calls it. This re-rendering isn’t always desirable.
useInterpret allows you to interpret a machine without subscribing to its updates, which means that by default, it won’t cause any re-rendering in the component.
μ΄ν useInterpretλ₯Ό μ¬μ©ν΄ μν λ¨Έμ μ ꡬλνκ³ , μν ꡬλ
μ΄ νμν μμΉμμλ§ useSelectorλ₯Ό ν΅ν΄ λͺ
μμ μΌλ‘ ꡬλ
νλλ‘ κ΅¬μ‘°λ₯Ό λ³κ²½νλ€.
βοΈ μ°Έκ³ λ‘, XState v5 κΈ°μ€μΌλ‘λ useInterpret ν
μ΄ useActorRefλ‘ λ³κ²½λμλ€. μ°λ¦¬λ νμ¬ v4 κΈ°λ°μΌλ‘ κ°λ° μ€μ΄κΈ° λλ¬Έμ μ¬μ ν useInterpretλ₯Ό μ¬μ©νκ³ μλ€.
π useSelector 쑰건 λΆκΈ°
μμ λ¬Έμ λ₯Ό ν΄κ²°νμμλ λΆκ΅¬νκ³ κ³μ 리λ λλ§ μ΄μλ λ¨μμμκ³ , λ€μ λλ²κΉ μ ν κ²°κ³Ό μλμ λΉμ·ν μ½λλ‘ μΈν΄ 리λ λλ§μ΄ μΌμ΄λκ³ μμλ€.
const data = useSelector(service, (state) => state.context.sharedData);
sharedDataκ° λ³κ²½λ λλ§λ€ μ΄λ₯Ό ꡬλ
νκ³ μλ λͺ¨λ μ»΄ν¬λνΈκ° 리λ λλ§ λλ ꡬ쑰μλ€. sharedDataλ μ 체 context μμ μ‘΄μ¬νλ κ°μ΄κΈ° λλ¬Έμ, μΌλΆ νλͺ©λ§ λ³κ²½λμ΄λ μ μ²΄κ° λ°μνκ³ μμλ€. ν΄λΉ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄, νμ¬ μ νλ νλͺ©μ ν΄λΉν λλ§ κ΅¬λ
νλλ‘ μ‘°κ±΄μ μΆκ°νλ€.
const data = useSelector(service, (state) => {
if (localId !== state.context.selectedId) return undefined;
return state.context.sharedData;
});
μμ κ°μ΄ μ²λ¦¬ν¨μΌλ‘μ¨, μν λ³κ²½μ΄ λ°μνλλΌλ νμ¬ νλͺ©μ ν΄λΉνλ λΈλ‘λ§ λ¦¬λ λλ§ λκ³ , κ·Έ μΈμ λΈλ‘μ μν₯μ λ°μ§ μκ² λμκ³ , νλμ λ³κ²½μ¬νμ΄ μμ λ λͺ¨λ μ‘ν°λΉν°κ° 리λ λλ§ λλ μ΄μλ λ κ°μ§ λ°©μμΌλ‘ λ§λ¬΄λ¦¬λμλ€.
κΈ°λ₯ νλ κ°λ°νλ€κ° μ°μ°ν μμ£Ό μ°μ΄λ μμμ 리λ λλ§ λ¬Έμ κΉμ§ ν¨κ» ν΄κ²°νκ² λμ΄, κ°μΈμ μΌλ‘λ κ½€ λΏλ―νμλ€. π
'π WIL > π React' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
requestAnimationFrame μΌλ‘ νλ μ νμ΄λ° λ§μΆκΈ° (0) | 2025.03.30 |
---|---|
λμΌν μ»΄ν¬λνΈλ₯Ό μ¬μ¬μ©νλ©΄μ λ 립μ μΈ μνλ₯Ό κ΄λ¦¬νλ λ°©λ² (1) | 2024.11.17 |
π¨ React Dev Tools μ λν΄ μμ보μ (0) | 2024.10.27 |
useTransition & useDeferredValue (0) | 2024.10.13 |
μΆμνλ.. (1) | 2023.12.05 |