Reactμ μ€νμ κΈ°λ₯μΈ experimental_useContextSelectorμ λν μ¬μΈ΅ λΆμ. 볡μ‘ν μ ν리μΌμ΄μ μμ μ»΄ν¬λνΈ λ¦¬λ λλ§μ μ΅μ ννκΈ° μν μ΄μ , μ¬μ©λ², νκ³ λ° μ€μ μ μ© μ¬λ‘λ₯Ό νꡬν©λλ€.
React experimental_useContextSelector: μ΅μ νλ μ±λ₯μ μν 컨ν μ€νΈ μ ν λ§μ€ν°νκΈ°
Reactμ Context APIλ μ»΄ν¬λνΈ νΈλ¦¬μ λͺ¨λ λ 벨μ ν΅ν΄ μλμΌλ‘ propsλ₯Ό μ λ¬νμ§ μκ³ λ μ»΄ν¬λνΈ κ°μ λ°μ΄ν°λ₯Ό 곡μ ν μ μλ κ°λ ₯ν λ©μ»€λμ¦μ μ 곡ν©λλ€. μ΄λ μ μ μν, ν
λ§, μ¬μ©μ μΈμ¦ λ° κΈ°ν μ¬λ¬ μμμ κ±ΈμΉ κ΄μ¬μ¬λ₯Ό κ΄λ¦¬νλ λ° λ§€μ° μ μ©ν©λλ€. κ·Έλ¬λ λ¨μν ꡬνμ λΆνμν μ»΄ν¬λνΈ λ¦¬λ λλ§μ μ λ°νμ¬ μ ν리μΌμ΄μ
μ±λ₯μ μν₯μ μ€ μ μμ΅λλ€. λ°λ‘ μ΄ μ§μ μμ νΉμ 컨ν
μ€νΈ κ°μ κΈ°λ°νμ¬ μ»΄ν¬λνΈ μ
λ°μ΄νΈλ₯Ό λ―ΈμΈ μ‘°μ νλλ‘ μ€κ³λ ν
μΈ experimental_useContextSelector
κ° λ±μ₯ν©λλ€.
μ νμ 컨ν μ€νΈ μ λ°μ΄νΈμ νμμ± μ΄ν΄νκΈ°
experimental_useContextSelector
λ₯Ό μ΄ν΄λ³΄κΈ° μ μ, μ΄κ²μ΄ ν΄κ²°νλ €λ ν΅μ¬ λ¬Έμ λ₯Ό μ΄ν΄νλ κ²μ΄ μ€μν©λλ€. Context providerκ° μ
λ°μ΄νΈλλ©΄, ν΄λΉ 컨ν
μ€νΈμ λͺ¨λ μλΉμλ μμ μ΄ μ¬μ©νλ νΉμ κ°μ΄ λ³κ²½λμλμ§ μ¬λΆμ κ΄κ³μμ΄ λ¦¬λ λλ§λ©λλ€. μμ μ ν리μΌμ΄μ
μμλ μ΄κ²μ΄ λμ λμ§ μμ μ μμ΅λλ€. κ·Έλ¬λ 컨ν
μ€νΈκ° μμ£Ό μ
λ°μ΄νΈλλ ν¬κ³ 볡μ‘ν μ ν리μΌμ΄μ
μμλ μ΄λ¬ν λΆνμν 리λ λλ§μ΄ μ¬κ°ν μ±λ₯ λ³λͺ© νμμ΄ λ μ μμ΅λλ€.
κ°λ¨ν μλ₯Ό λ€μ΄λ³΄κ² μ΅λλ€. μ¬μ©μ νλ‘ν λ°μ΄ν°(μ΄λ¦, μλ°ν, μ΄λ©μΌ)μ UI νκ²½μ€μ (ν λ§, μΈμ΄)μ λͺ¨λ ν¬ν¨νλ μ μ μ¬μ©μ 컨ν μ€νΈκ° μλ μ ν리μΌμ΄μ μ΄ μμ΅λλ€. ν μ»΄ν¬λνΈλ μ¬μ©μμ μ΄λ¦λ§ νμνλ©΄ λ©λλ€. μ νμ μ λ°μ΄νΈκ° μλ€λ©΄, ν λ§λ μΈμ΄ μ€μ μ λν μ΄λ ν λ³κ²½μ΄λΌλ μ΄λ¦ νμ μ»΄ν¬λνΈμ 리λ λλ§μ μ λ°ν κ²μ λλ€. λΉλ‘ ν΄λΉ μ»΄ν¬λνΈκ° ν λ§λ μΈμ΄μ μν₯μ λ°μ§ μμμλ λΆκ΅¬νκ³ λ§μ΄μ£ .
experimental_useContextSelector μκ°
experimental_useContextSelector
λ μ»΄ν¬λνΈκ° 컨ν
μ€νΈ κ°μ νΉμ λΆλΆλ§ ꡬλ
ν μ μλλ‘ νλ React ν
μ
λλ€. μ΄λ 컨ν
μ€νΈ κ°μ²΄μ μ
λ ν° ν¨μλ₯Ό μΈμλ‘ λ°μ μ΄λ₯Ό λ¬μ±ν©λλ€. μ
λ ν° ν¨μλ μ 체 컨ν
μ€νΈ κ°μ λ°μ μ»΄ν¬λνΈκ° μμ‘΄νλ νΉμ κ°(λλ κ°λ€)μ λ°νν©λλ€. κ·Έλ¬λ©΄ Reactλ λ°νλ κ°μ λν΄ μμ λΉκ΅(shallow comparison)λ₯Ό μννκ³ , μ νλ κ°μ΄ λ³κ²½λ κ²½μ°μλ§ μ»΄ν¬λνΈλ₯Ό 리λ λλ§ν©λλ€.
μ€μ μ°Έκ³ μ¬ν: experimental_useContextSelector
λ νμ¬ μ€νμ κΈ°λ₯μ΄λ©° ν₯ν React 릴리μ€μμ λ³κ²½λ μ μμ΅λλ€. λμμ± λͺ¨λ(concurrent mode)λ₯Ό μ ννκ³ μ€νμ κΈ°λ₯ νλκ·Έλ₯Ό νμ±νν΄μΌ ν©λλ€.
experimental_useContextSelector νμ±ννκΈ°
experimental_useContextSelector
λ₯Ό μ¬μ©νλ €λ©΄ λ€μμ΄ νμν©λλ€:
- λμμ± λͺ¨λλ₯Ό μ§μνλ React λ²μ (React 18 μ΄μ)μ μ¬μ©νκ³ μλμ§ νμΈνμΈμ.
- λμμ± λͺ¨λμ μ€νμ 컨ν μ€νΈ μ λ ν° κΈ°λ₯μ νμ±ννμΈμ. μ΄λ μΌλ°μ μΌλ‘ λ²λ€λ¬(μ: Webpack, Parcel)λ₯Ό ꡬμ±νκ³ κΈ°λ₯ νλκ·Έλ₯Ό μ€μ νλ μμ μ ν¬ν¨ν©λλ€. μ΅μ μ§μΉ¨μ 곡μ React λ¬Έμλ₯Ό νμΈνμΈμ.
experimental_useContextSelectorμ κΈ°λ³Έ μ¬μ©λ²
μ½λ μμ λ₯Ό ν΅ν΄ μ¬μ©λ²μ μ€λͺ
νκ² μ΅λλ€. μ¬μ©μ μ 보μ νκ²½μ€μ μ μ 곡νλ UserContext
κ° μλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€:
// UserContext.js
import React, { createContext, useState, useContext } from 'react';
const UserContext = createContext({
user: {
name: 'John Doe',
email: 'john.doe@example.com',
avatar: '/path/to/avatar.jpg',
},
preferences: {
theme: 'light',
language: 'en',
},
updateTheme: () => {},
updateLanguage: () => {},
});
const UserProvider = ({ children }) => {
const [user, setUser] = useState({
name: 'John Doe',
email: 'john.doe@example.com',
avatar: '/path/to/avatar.jpg',
});
const [preferences, setPreferences] = useState({
theme: 'light',
language: 'en',
});
const updateTheme = (newTheme) => {
setPreferences({...preferences, theme: newTheme});
};
const updateLanguage = (newLanguage) => {
setPreferences({...preferences, language: newLanguage});
};
return (
{children}
);
};
const useUser = () => useContext(UserContext);
export { UserContext, UserProvider, useUser };
μ΄μ experimental_useContextSelector
λ₯Ό μ¬μ©νμ¬ μ¬μ©μμ μ΄λ¦λ§ νμνλ μ»΄ν¬λνΈλ₯Ό λ§λ€μ΄ λ³΄κ² μ΅λλ€:
// UserName.js
import React from 'react';
import { UserContext } from './UserContext';
import { experimental_useContextSelector as useContextSelector } from 'react';
const UserName = () => {
const userName = useContextSelector(UserContext, (context) => context.user.name);
console.log('UserName μ»΄ν¬λνΈκ° λ λλ§λμμ΅λλ€!');
return Name: {userName}
;
};
export default UserName;
μ΄ μμ μμ μ
λ ν° ν¨μ (context) => context.user.name
μ UserContext
μμ μ¬μ©μμ μ΄λ¦λ§ μΆμΆν©λλ€. UserName
μ»΄ν¬λνΈλ ν
λ§λ μΈμ΄μ κ°μ UserContext
μ λ€λ₯Έ μμ±μ΄ μ
λ°μ΄νΈλλλΌλ μ¬μ©μμ μ΄λ¦μ΄ λ³κ²½λ κ²½μ°μλ§ λ¦¬λ λλ§λ©λλ€.
experimental_useContextSelector μ¬μ©μ μ΄μ
- μ±λ₯ ν₯μ: λΆνμν μ»΄ν¬λνΈ λ¦¬λ λλ§μ μ€μ¬, νΉν 볡μ‘νκ³ μμ£Ό μ λ°μ΄νΈλλ 컨ν μ€νΈλ₯Ό κ°μ§ μ ν리μΌμ΄μ μμ λ λμ μ±λ₯μ μ΄λμ΄λ λλ€.
- μΈλ°ν μ μ΄: μ΄λ€ 컨ν μ€νΈ κ°μ΄ μ»΄ν¬λνΈ μ λ°μ΄νΈλ₯Ό μ λ°ν μ§ μΈλ°νκ² μ μ΄ν μ μμ΅λλ€.
- κ°μνλ μ΅μ ν: μλ λ©λͺ¨μ΄μ μ΄μ (memoization) κΈ°μ μ λΉν΄ 컨ν μ€νΈ μ΅μ νμ λ κ°λ¨ν μ κ·Ό λ°©μμ μ 곡ν©λλ€.
- ν₯μλ μ μ§λ³΄μμ±: μ»΄ν¬λνΈκ° μμ‘΄νλ 컨ν μ€νΈ κ°μ λͺ μμ μΌλ‘ μ μΈν¨μΌλ‘μ¨ μ½λ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ ν₯μμν¬ μ μμ΅λλ€.
experimental_useContextSelectorλ₯Ό μ¬μ©ν΄μΌ ν λ
experimental_useContextSelector
λ λ€μ μλ리μ€μμ κ°μ₯ μ μ©ν©λλ€:
- ν¬κ³ 볡μ‘ν μ ν리μΌμ΄μ : μλ§μ μ»΄ν¬λνΈμ μμ£Ό μ λ°μ΄νΈλλ 컨ν μ€νΈλ₯Ό λ€λ£° λ.
- μ±λ₯ λ³λͺ© νμ: νλ‘νμΌλ§μ ν΅ν΄ λΆνμν 컨ν μ€νΈ κ΄λ ¨ 리λ λλ§μ΄ μ±λ₯μ μν₯μ λ―ΈμΉκ³ μμμ΄ λ°νμ‘μ λ.
- 볡μ‘ν 컨ν μ€νΈ κ°: 컨ν μ€νΈμ λ§μ μμ±μ΄ ν¬ν¨λμ΄ μκ³ , μ»΄ν¬λνΈκ° κ·Έμ€ μΌλΆλ§ νμλ‘ ν λ.
experimental_useContextSelectorλ₯Ό νΌν΄μΌ ν λ
experimental_useContextSelector
λ λ§€μ° ν¨κ³Όμ μΌ μ μμ§λ§, λ§λ³ν΅μΉμ½μ μλλ©° μ μ€νκ² μ¬μ©ν΄μΌ ν©λλ€. λ€μμ μ΄κ²μ΄ μ΅μ μ μ νμ΄ μλ μ μλ μν©μ
λλ€:
- κ°λ¨ν μ ν리μΌμ΄μ
: μ»΄ν¬λνΈκ° μ κ³ μ»¨ν
μ€νΈ μ
λ°μ΄νΈκ° λλ¬Έ μκ·λͺ¨ μ ν리μΌμ΄μ
μ κ²½μ°,
experimental_useContextSelector
μ¬μ©μ λ°λ₯Έ μ€λ²ν€λκ° μ΄μ λ³΄λ€ ν΄ μ μμ΅λλ€. - λ§μ 컨ν μ€νΈ κ°μ μμ‘΄νλ μ»΄ν¬λνΈ: μ»΄ν¬λνΈκ° 컨ν μ€νΈμ μλΉ λΆλΆμ μμ‘΄νλ κ²½μ°, κ° κ°μ κ°λ³μ μΌλ‘ μ ννλ κ²μ΄ ν° μ±λ₯ ν₯μμ μ 곡νμ§ μμ μ μμ΅λλ€.
- μ νλ κ°μ μ¦μ μ λ°μ΄νΈ: μ νλ 컨ν μ€νΈ κ°μ΄ μμ£Ό λ³κ²½λλ©΄ μ»΄ν¬λνΈλ μ¬μ ν μμ£Ό 리λ λλ§λμ΄ μ±λ₯μμ μ΄μ μ΄ λ¬΄ν¨νλ©λλ€.
- μ΄κΈ° κ°λ° λ¨κ³: λ¨Όμ ν΅μ¬ κΈ°λ₯μ μ§μ€νμΈμ. μ±λ₯ νλ‘νμΌλ§μ κΈ°λ°μΌλ‘ νμν λ λμ€μ
experimental_useContextSelector
λ‘ μ΅μ ννμΈμ. μ£λΆλ₯Έ μ΅μ νλ λΉμμ°μ μΌ μ μμ΅λλ€.
κ³ κΈ μ¬μ©λ² λ° κ³ λ €μ¬ν
1. λΆλ³μ±(Immutability)μ΄ ν΅μ¬μ λλ€
experimental_useContextSelector
λ μμ λλ±μ± κ²μ¬(Object.is
)μ μμ‘΄νμ¬ μ νλ 컨ν
μ€νΈ κ°μ΄ λ³κ²½λμλμ§ νμΈν©λλ€. λ°λΌμ 컨ν
μ€νΈ κ°μ΄ λΆλ³(immutable)νλλ‘ λ³΄μ₯νλ κ²μ΄ μ€μν©λλ€. 컨ν
μ€νΈ κ°μ μ§μ λ³κ²½νλ©΄ κΈ°λ³Έ λ°μ΄ν°κ° λ³κ²½λμλλΌλ 리λ λλ§μ΄ λ°μνμ§ μμ΅λλ€. 컨ν
μ€νΈ κ°μ μ
λ°μ΄νΈν λλ νμ μλ‘μ΄ κ°μ²΄λ λ°°μ΄μ μμ±ν΄μΌ ν©λλ€.
μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ΄ νλ λμ :
context.user.name = 'Jane Doe'; // μλͺ»λ¨ - κ°μ²΄λ₯Ό μ§μ λ³κ²½ν¨
λ€μμ μ¬μ©νμΈμ:
setUser({...user, name: 'Jane Doe'}); // μ¬λ°λ¦ - μ κ°μ²΄λ₯Ό μμ±ν¨
2. μ λ ν°μ λ©λͺ¨μ΄μ μ΄μ
experimental_useContextSelector
κ° λΆνμν μ»΄ν¬λνΈ λ¦¬λ λλ§μ λ°©μ§νλ λ° λμμ΄ λμ§λ§, μ
λ ν° ν¨μ μ체λ₯Ό μ΅μ ννλ κ² λν μ€μν©λλ€. μ
λ ν° ν¨μκ° λ λλ§λ λλ§λ€ λΉμ©μ΄ λ§μ΄ λλ κ³μ°μ μννκ±°λ μ κ°μ²΄λ₯Ό μμ±νλ€λ©΄, μ νμ μ
λ°μ΄νΈμ μ±λ₯ μ΄μ μ μμν μ μμ΅λλ€. useCallback
μ΄λ λ€λ₯Έ λ©λͺ¨μ΄μ μ΄μ
κΈ°μ μ μ¬μ©νμ¬ μ
λ ν° ν¨μκ° νμν λλ§ λ€μ μμ±λλλ‘ νμΈμ.
import React, { useCallback } from 'react';
import { UserContext } from './UserContext';
import { experimental_useContextSelector as useContextSelector } from 'react';
const UserName = () => {
const selectUserName = useCallback((context) => context.user.name, []);
const userName = useContextSelector(UserContext, selectUserName);
return Name: {userName}
;
};
export default UserName;
μ΄ μμ μμ useCallback
μ selectUserName
ν¨μκ° μ»΄ν¬λνΈκ° μ²μ λ§μ΄νΈλ λ ν λ²λ§ λ€μ μμ±λλλ‘ λ³΄μ₯ν©λλ€. μ΄λ λΆνμν κ³μ°μ λ°©μ§νκ³ μ±λ₯μ ν₯μμν΅λλ€.
3. μλνν° μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬μ ν¨κ» μ¬μ©νκΈ°
experimental_useContextSelector
λ Redux, Zustand, λλ Jotaiμ κ°μ μλνν° μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬μ ν¨κ» μ¬μ©ν μ μμ΅λλ€. λ¨, μ΄λ¬ν λΌμ΄λΈλ¬λ¦¬κ° React Contextλ₯Ό ν΅ν΄ μνλ₯Ό λ
ΈμΆν΄μΌ ν©λλ€. ꡬ체μ μΈ κ΅¬νμ λΌμ΄λΈλ¬λ¦¬μ λ°λΌ λ€λ₯΄μ§λ§, μΌλ°μ μΈ μμΉμ λμΌν©λλ€: experimental_useContextSelector
λ₯Ό μ¬μ©νμ¬ μ»¨ν
μ€νΈμμ νμν μν λΆλΆλ§ μ ννλ κ²μ
λλ€.
μλ₯Ό λ€μ΄, React Reduxμ useContext
ν
κ³Ό ν¨κ» Reduxλ₯Ό μ¬μ©νλ κ²½μ°, experimental_useContextSelector
λ₯Ό μ¬μ©νμ¬ Redux μ€ν μ΄ μνμ νΉμ μ‘°κ°(slice)μ μ νν μ μμ΅λλ€.
4. μ±λ₯ νλ‘νμΌλ§
experimental_useContextSelector
λ₯Ό ꡬννκΈ° μ κ³Ό νμ μ ν리μΌμ΄μ
μ μ±λ₯μ νλ‘νμΌλ§νμ¬ μ€μ λ‘ μ΄μ μ μ 곡νλμ§ νμΈνλ κ²μ΄ μ€μν©λλ€. Reactμ Profiler λꡬλ λ€λ₯Έ μ±λ₯ λͺ¨λν°λ§ λꡬλ₯Ό μ¬μ©νμ¬ μ»¨ν
μ€νΈ κ΄λ ¨ 리λ λλ§μ΄ λ³λͺ© νμμ μΌμΌν€λ μμμ μλ³νμΈμ. νλ‘νμΌλ§ λ°μ΄ν°λ₯Ό μ μ€νκ² λΆμνμ¬ experimental_useContextSelector
κ° λΆνμν 리λ λλ§μ ν¨κ³Όμ μΌλ‘ μ€μ΄κ³ μλμ§ νλ¨νμΈμ.
κ΅μ ν κ³ λ €μ¬ν λ° μμ
κ΅μ νλ μ ν리μΌμ΄μ
μ λ€λ£° λ, 컨ν
μ€νΈλ μ’
μ’
μΈμ΄ μ€μ , ν΅ν νμ, λ μ§/μκ° νμκ³Ό κ°μ μ§μν λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ λ° μ€μν μν μ ν©λλ€. experimental_useContextSelector
λ μ΄λ¬ν μλ리μ€μμ μ§μνλ λ°μ΄ν°λ₯Ό νμνλ μ»΄ν¬λνΈμ μ±λ₯μ μ΅μ ννλ λ° νΉν μ μ©ν μ μμ΅λλ€.
μμ 1: μΈμ΄ μ ν
λ€κ΅μ΄λ₯Ό μ§μνλ μ ν리μΌμ΄μ
μ μκ°ν΄ λ³΄κ² μ΅λλ€. νμ¬ μΈμ΄λ LanguageContext
μ μ μ₯λ©λλ€. μ§μνλ μΈμ¬λ§ λ©μμ§λ₯Ό νμνλ μ»΄ν¬λνΈλ experimental_useContextSelector
λ₯Ό μ¬μ©νμ¬ μ»¨ν
μ€νΈμ λ€λ₯Έ κ°μ΄ μ
λ°μ΄νΈλ λλ§λ€ 리λ λλ§νλ λμ , μΈμ΄κ° λ³κ²½λ λλ§ λ¦¬λ λλ§νλλ‘ ν μ μμ΅λλ€.
// LanguageContext.js
import React, { createContext, useState, useContext } from 'react';
const LanguageContext = createContext({
language: 'en',
translations: {
en: {
greeting: 'Hello, world!',
},
fr: {
greeting: 'Bonjour, le monde!',
},
es: {
greeting: 'Β‘Hola, mundo!',
},
},
setLanguage: () => {},
});
const LanguageProvider = ({ children }) => {
const [language, setLanguage] = useState('en');
const changeLanguage = (newLanguage) => {
setLanguage(newLanguage);
};
const translations = LanguageContext.translations;
return (
{children}
);
};
const useLanguage = () => useContext(LanguageContext);
export { LanguageContext, LanguageProvider, useLanguage };
// Greeting.js
import React from 'react';
import { LanguageContext } from './LanguageContext';
import { experimental_useContextSelector as useContextSelector } from 'react';
const Greeting = () => {
const languageContext = useContextSelector(LanguageContext, (context) => {
return {
language: context.language,
translations: context.translations
}
});
const greeting = languageContext.translations[languageContext.language].greeting;
return {greeting}
;
};
export default Greeting;
μμ 2: ν΅ν νμ μ§μ
μ μμκ±°λ μ ν리μΌμ΄μ
μ μ¬μ©μκ° μ νΈνλ ν΅νλ₯Ό CurrencyContext
μ μ μ₯ν μ μμ΅λλ€. μ ν κ°κ²©μ νμνλ μ»΄ν¬λνΈλ experimental_useContextSelector
λ₯Ό μ¬μ©νμ¬ ν΅νκ° λ³κ²½λ λλ§ λ¦¬λ λλ§λλλ‘ νμ¬ κ°κ²©μ΄ νμ μ¬λ°λ₯Έ νμμΌλ‘ νμλλλ‘ λ³΄μ₯ν μ μμ΅λλ€.
μμ 3: μκ°λ μ²λ¦¬
λ€λ₯Έ μκ°λμ μ¬μ©μμκ² μ΄λ²€νΈ μκ°μ νμνλ μ ν리μΌμ΄μ
μ TimeZoneContext
λ₯Ό μ¬μ©νμ¬ μ¬μ©μκ° μ νΈνλ μκ°λλ₯Ό μ μ₯ν μ μμ΅λλ€. μ΄λ²€νΈ μκ°μ νμνλ μ»΄ν¬λνΈλ experimental_useContextSelector
λ₯Ό μ¬μ©νμ¬ μκ°λκ° λ³κ²½λ λλ§ λ¦¬λ λλ§λλλ‘ νμ¬ μκ°μ΄ νμ μ¬μ©μμ νμ§ μκ°μΌλ‘ νμλλλ‘ λ³΄μ₯ν μ μμ΅λλ€.
experimental_useContextSelectorμ νκ³
- μ€νμ μν: μ€νμ κΈ°λ₯μ΄λ―λ‘ APIλ λμμ΄ ν₯ν React 릴리μ€μμ λ³κ²½λ μ μμ΅λλ€.
- μμ λλ±μ±(Shallow Equality): μμ λλ±μ± κ²μ¬μ μμ‘΄νλ―λ‘ λ³΅μ‘ν κ°μ²΄λ λ°°μ΄μλ μΆ©λΆνμ§ μμ μ μμ΅λλ€. κ²½μ°μ λ°λΌ κΉμ λΉκ΅κ° νμν μ μμ§λ§, μ±λ₯μ λ―ΈμΉλ μν₯ λλ¬Έμ λλ¬Όκ² μ¬μ©ν΄μΌ ν©λλ€.
- κ³Όμ μ΅μ ν κ°λ₯μ±:
experimental_useContextSelector
λ₯Ό κ³Όλνκ² μ¬μ©νλ©΄ μ½λμ λΆνμν 볡μ‘μ±μ΄ μΆκ°λ μ μμ΅λλ€. μ±λ₯ ν₯μμ΄ μΆκ°λ 볡μ‘μ±μ μ λΉννλμ§ μ μ€νκ² κ³ λ €νλ κ²μ΄ μ€μν©λλ€. - λλ²κΉ 볡μ‘μ±: μ νμ 컨ν μ€νΈ μ λ°μ΄νΈμ κ΄λ ¨λ λ¬Έμ λ₯Ό λλ²κΉ νλ κ²μ νΉν 볡μ‘ν 컨ν μ€νΈ κ°κ³Ό μ λ ν° ν¨μλ₯Ό λ€λ£° λ μ΄λ €μΈ μ μμ΅λλ€.
experimental_useContextSelectorμ λμ
experimental_useContextSelector
κ° μ¬μ© μ¬λ‘μ μ ν©νμ§ μμ κ²½μ°, λ€μ λμμ κ³ λ €ν΄ λ³΄μΈμ:
- useMemo: 컨ν
μ€νΈλ₯Ό μλΉνλ μ»΄ν¬λνΈλ₯Ό λ©λͺ¨μ΄μ¦ν©λλ€. μ΄λ μ»΄ν¬λνΈμ μ λ¬λ propsκ° λ³κ²½λμ§ μμλ€λ©΄ 리λ λλ§μ λ°©μ§ν©λλ€. μ΄λ
experimental_useContextSelector
λ³΄λ€ μΈλ°νμ§λ μμ§λ§ μΌλΆ μ¬μ© μ¬λ‘μμλ λ κ°λ¨ν μ μμ΅λλ€. - React.memo: propsλ₯Ό κΈ°λ°μΌλ‘ ν¨μν μ»΄ν¬λνΈλ₯Ό λ©λͺ¨μ΄μ¦νλ κ³ μ°¨ μ»΄ν¬λνΈ(HOC)μ
λλ€.
useMemo
μ μ μ¬νμ§λ§ μ 체 μ»΄ν¬λνΈμ μ μ©λ©λλ€. - Redux (λλ μ μ¬ν μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬): μ΄λ―Έ Reduxλ μ μ¬ν λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νκ³ μλ€λ©΄, ν΄λΉ λΌμ΄λΈλ¬λ¦¬μ μ λ ν° κΈ°λ₯μ νμ©νμ¬ μ€ν μ΄μμ νμν λ°μ΄ν°λ§ μ ννμΈμ.
- 컨ν μ€νΈ λΆλ¦¬: 컨ν μ€νΈμ κ΄λ ¨ μλ λ§μ κ°μ΄ ν¬ν¨λμ΄ μλ€λ©΄, μ¬λ¬ κ°μ μμ 컨ν μ€νΈλ‘ λΆλ¦¬νλ κ²μ κ³ λ €ν΄ λ³΄μΈμ. μ΄λ κ°λ³ κ°μ΄ λ³κ²½λ λ 리λ λλ§μ λ²μλ₯Ό μ€μ¬μ€λλ€.
κ²°λ‘
experimental_useContextSelector
λ Context APIμ ν¬κ² μμ‘΄νλ React μ ν리μΌμ΄μ
μ μ΅μ ννκΈ° μν κ°λ ₯ν λꡬμ
λλ€. μ»΄ν¬λνΈκ° 컨ν
μ€νΈ κ°μ νΉμ λΆλΆλ§ ꡬλ
νλλ‘ νμ©ν¨μΌλ‘μ¨ λΆνμν 리λ λλ§μ ν¬κ² μ€μ΄κ³ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€. κ·Έλ¬λ μ μ€νκ² μ¬μ©νκ³ κ·Έ νκ³μ λμμ μ μ€νκ² κ³ λ €νλ κ²μ΄ μ€μν©λλ€. experimental_useContextSelector
κ° μ€μ λ‘ μ΄μ μ μ 곡νλμ§ νμΈνκ³ κ³Όμ μ΅μ νλ₯Ό νμ§ μλλ‘ μ ν리μΌμ΄μ
μ μ±λ₯μ νλ‘νμΌλ§νλ κ²μ μμ§ λ§μΈμ.
experimental_useContextSelector
λ₯Ό νλ‘λμ
μ ν΅ν©νκΈ° μ μ, κΈ°μ‘΄ μ½λλ² μ΄μ€μμ νΈνμ±μ μ² μ ν ν
μ€νΈνκ³ μ€νμ νΉμ±μΌλ‘ μΈν ν₯ν API λ³κ²½ κ°λ₯μ±μ μΈμ§ν΄μΌ ν©λλ€. μ μ€ν κ³νκ³Ό ꡬνμ ν΅ν΄ experimental_useContextSelector
λ μ μΈκ³ μ¬μ©μλ₯Ό μν κ³ μ±λ₯ React μ ν리μΌμ΄μ
μ ꡬμΆνλ λ° κ·μ€ν μμ°μ΄ λ μ μμ΅λλ€.