λͺ©λ‘
- Introduction
- React.memo
- Conclusion
π Introduction
μλ νμΈμ. μ΄λ² ν¬μ€ν μμλ μ§λ μκ°μ μΈκΈ νμλ React.memoμ λν΄μ μμλ³΄κ² μ΅λλ€. μ»΄ν¬λνΈμ λλλ§μ΄ λΆνμν λ μΈμ μμ΄μ. μ»΄ν¬λνΈ λ¦¬λλλ§μ μ΅μ ν ν μ μμ΅λλ€. νλ² μμΈνκ² μμλ³Όκ²μ.
π React.memo
μ¬μ© λ°©λ²μ κ°λ¨ν©λλ€.
export defaultλ₯Ό ν΄μ€λ κ°μΈμ£Όμλ©΄ λμ.
export default React.memo(CreateUser);
νΉμ μ΄λ κ²λ κ°λ₯ν΄μ.
// μ΄λ κ² μκΈ΄ μμ΄λ₯Ό
function User() {
// ...
}
// μ΄λ κ² λ³κ²½μ΄ κ°μΈμ€μ μμ΄μ
const User = React.memo(function User(){
// ...
});
μ΄λ κ² νλ©΄ μ»΄ν¬λνΈκ° λ°λμμλλ§ λ¦¬λλλ§μ΄ λ©λλ€. λν React.memoμμλ λλ²μ§Έ μΈμλ‘ propsAreEqualμ λ°μ μ μμ΄μ. λ§μ½ propsAreEqualμ true
κ° λ°νμ΄ λλ€λ©΄ re renderingμ λ°©μ§νκ³ false
κ° λ°ν λλ€λ©΄ re renderingμ ν΄μ£Όκ² λμ΄μμ΅λλ€. μ½λλ‘ νλ² λ³Όκ²μ.
export default React.memo(
UserList,
(prevProps, nextProps) => prevProps.users === nextProps.users
);
첫λ²μ§Έ μΈμλ‘λ μ μ propsλ₯Ό λ°μμ€κ² λκ³ λλ²μ§Έ μΈμλ‘λ λ€μ propsλ₯Ό λ°μμ΅λλ€. κ·Έλ¦¬κ³ usersκ° λ§μ½ μ κ³Ό νκ° μΌμΉ νλ€λ©΄ re renderingμ λ°©μ§ν΄μ€μ μμ΄μ.
μΆκ°μ μΌλ‘ μ‘°κΈλ μ΅μ νλ₯Ό μμΌλ³΄μλ©΄ μ ν¬μ€ν μμμ onToggleμ νλ² μ΄ν΄λ³΄κ² μ΅λλ€.
const onToggle = useCallback(
(userId) => {
setUsers(
users.map((user) =>
user.id === userId ? { ...user, active: !user.active } : user
)
);
},
[users]
);
μ΄λ κ² μκΈ΄ μμ΄λ₯Ό setUsersμ depλ₯Ό μ§μμ€μ μμ΄μ.
const onToggle = useCallback((userId) => {
setUsers((users) =>
users.map((user) =>
user.id === userId ? { ...user, active: !user.active } : user
)
);
}, []);
μ΄λ κ² ν΄μ€λ€λ©΄ μ΄μ depsκ° μκΈ° λλ¬Έμ κ³μ μ¬μ¬μ© κ°λ₯νκ² μ£ ?
π Conclusion
μ΄λ κ² React.memoμ λν΄μ μμ보μμ΅λλ€. μμ 2 ν¬μ€ν λ μ΅μ νμ κ΄ν λ΄μ©μ΄μμ§λ§ κ·Έμ€μ κ°μ₯ μ±λ₯μ μ΅μ ν μν¬μ μμ΅λλ€. νμ§λ§ React.memo, useCallback, useMemoμ κ°μ κ²λ€μ λ¨λ°νκ² λλ©΄ μ€νλ € μ½λλ₯Ό λ§μ΄ μ€ννλ κ²°κ³Όκ° λμ¬μλ μμ΄μ. κ·Έλ¬λ κΌ νμν μκ°μ μ΅μ νλ₯Ό μ§νν΄μ£Όμλ©΄ μ’μκ±° κ°μμ. κ·ΈλΌ λ€μ ν¬μ€ν μμ λ§λμ μλ !
'React Study' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
React - custom hook (0) | 2020.12.13 |
---|---|
React - useReducer (0) | 2020.12.13 |
React - useCallback (0) | 2020.12.07 |
React - useMemo (0) | 2020.12.06 |
React - useEffect (0) | 2020.12.05 |