Reactμ μ€νμ `useOpaqueIdentifier` ν μΌλ‘ ID μμ±μ μ΅μ ννμ¬, 볡μ‘ν μ ν리μΌμ΄μ μ μ κ·Όμ±κ³Ό μ±λ₯μ κ°μ νλ λ°©λ²μ μμ보μΈμ.
React μ€νμ κΈ°λ₯ `useOpaqueIdentifier` κ΄λ¦¬ μμ§: ID μμ± μ΅μ ν
Reactλ λμμμ΄ λ°μ νκ³ μμΌλ©°, μλ‘μ΄ κΈ°λ₯κ³Ό μ€νμ μΈ APIκ° λμ¬ λλ§λ€ κ°λ°μλ€μ μ±λ₯μ΄ λ°μ΄λκ³ μ κ·Όμ± λμ μΉ μ ν리μΌμ΄μ
μ ꡬμΆν μ μλ λ λ§μ λꡬλ₯Ό μ»κ² λ©λλ€. κ·Έλ¬ν μ€νμ κΈ°λ₯ μ€ νλκ° useOpaqueIdentifier
ν
μ
λλ€. μ΄ ν
μ React μ»΄ν¬λνΈ λ΄μμ κ³ μ IDλ₯Ό μμ±νλ νμ€νλκ³ μ΅μ νλ λ°©λ²μ μ 곡νμ¬ μ κ·Όμ±, μλ² μ¬μ΄λ λ λλ§(SSR), νμ΄λλ μ΄μ
κ³Ό κ΄λ ¨λ μΌλ°μ μΈ λ¬Έμ λ€μ ν΄κ²°ν©λλ€. μ΄ κΈμμλ useOpaqueIdentifier
μ 볡μ‘ν λ΄μ©λ€μ κΉμ΄ νκ³ λ€μ΄ κ·Έ μ΄μ , μ¬μ© μ¬λ‘, κ·Έλ¦¬κ³ μ΄κ²μ΄ μ΄λ»κ² λ κ²¬κ³ νκ³ μ μ§λ³΄μνκΈ° μ¬μ΄ μ½λλ² μ΄μ€μ κΈ°μ¬ν μ μλμ§ νμν©λλ€.
λ¬Έμ μ : Reactμμ κ³ μ ID μμ±νκΈ°
Reactμμ κ³ μ IDλ₯Ό μμ±νλ κ²μ μΈλ» 보기μλ μ¬μν΄ λ³΄μΌ μ μμ§λ§, λ€μκ³Ό κ°μ λ€μν μμλ₯Ό κ³ λ €νλ©΄ κΈλ°© 볡μ‘ν΄μ§λλ€:
- μ κ·Όμ± (ARIA):
aria-labelledby
λ°aria-describedby
μ κ°μ λ§μ ARIA μμ±μ IDλ₯Ό μ¬μ©νμ¬ μμλ₯Ό μ°κ²°ν΄μΌ ν©λλ€. μ΄λ¬ν IDλ₯Ό μλμΌλ‘ κ΄λ¦¬νλ©΄ μΆ©λ λ° μ κ·Όμ± λ¬Έμ κ° λ°μν μ μμ΅λλ€. - μλ² μ¬μ΄λ λ λλ§ (SSR): μλ²μμ React μ»΄ν¬λνΈλ₯Ό λ λλ§ν λ, μμ±λ IDλ νμ΄λλ μ΄μ κ³Όμ μμ ν΄λΌμ΄μΈνΈμμ μμ±λ IDμ μΌμΉν΄μΌ ν©λλ€. λΆμΌμΉλ ν΄λΌμ΄μΈνΈ μΈ‘ Reactκ° μλ²μμ μ΄λ―Έ λ λλ§λ μμλ₯Ό λ€μ λ λλ§νλ €κ³ μλνμ¬ μ¬μ©μ κ²½νμ λ°©ν΄νλ νμ΄λλ μ΄μ μ€λ₯λ‘ μ΄μ΄μ§ μ μμ΅λλ€.
- μ»΄ν¬λνΈ μ¬μ¬μ©μ±: λ§μ½ μ»΄ν¬λνΈκ° κ°λ¨ν μΉ΄μ΄ν°λ κ³ μ λ μ λμ¬λ₯Ό κΈ°λ°μΌλ‘ IDλ₯Ό μμ±νλ€λ©΄, λμΌν νμ΄μ§μμ μ»΄ν¬λνΈλ₯Ό μ¬λ¬ λ² μ¬μ¬μ©ν κ²½μ° μ€λ³΅λ IDκ° λ°μν μ μμ΅λλ€.
- μ±λ₯: λ―Έμν ID μμ± μ λ΅μ λΆνμν λ¬Έμμ΄ μ°κ²°μ΄λ 볡μ‘ν κ³μ°μ ν¬ν¨ν μ μμΌλ©°, νΉν λκ·λͺ¨ μ ν리μΌμ΄μ μμ μ±λ₯μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
μμ¬μ μΌλ‘ κ°λ°μλ€μ uuid
μ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νκ±°λ, νμμ€ν¬νλ₯Ό κΈ°λ°μΌλ‘ IDλ₯Ό μμ±νκ±°λ, 컀μ€ν
ID μΉ΄μ΄ν°λ₯Ό μ μ§νλ λ± λ€μν ν΄κ²° λ°©λ²μ μμ‘΄ν΄ μμ΅λλ€. κ·Έλ¬λ μ΄λ¬ν μ κ·Ό λ°©μμ 볡μ‘μ±, μ±λ₯ λλ μ μ§λ³΄μμ± μΈ‘λ©΄μμ μ’
μ’
μ체μ μΈ λ¨μ μ λλ°ν©λλ€.
useOpaqueIdentifier
μκ°
Reactμ μ€νμ κΈ°λ₯μΌλ‘ λμ
λ useOpaqueIdentifier
ν
μ κ³ μ ID μμ±μ μν λ΄μ₯λ μ΅μ ν μ루μ
μ μ 곡ν¨μΌλ‘μ¨ μ΄λ¬ν λ¬Έμ λ€μ ν΄κ²°νλ κ²μ λͺ©νλ‘ ν©λλ€. μ΄ ν
μ λ€μκ³Ό κ°μ μ΄μ μ μ 곡ν©λλ€:
- κ³ μ μ± λ³΄μ₯: μ΄ ν μ κ° μ»΄ν¬λνΈ μΈμ€ν΄μ€κ° κ³ μ ν IDλ₯Ό λ°λλ‘ λ³΄μ₯νμ¬, λμΌν νμ΄μ§μμ μ»΄ν¬λνΈκ° μ¬λ¬ λ² μ¬μ©λ λμλ μΆ©λμ λ°©μ§ν©λλ€.
- SSR νΈνμ±:
useOpaqueIdentifier
λ μλ² μ¬μ΄λ λ λλ§κ³Ό μννκ² μλνλλ‘ μ€κ³λμμ΅λλ€. νμ΄λλ μ΄μ μ μΈμνλ μ λ΅μ μ¬μ©νμ¬ μμ±λ IDκ° μλ²μ ν΄λΌμ΄μΈνΈ κ°μ μΌκ΄λλλ‘ λ³΄μ₯νμ¬ νμ΄λλ μ΄μ μ€λ₯λ₯Ό μ κ±°ν©λλ€. - μ κ·Όμ± μ€μ¬: κ³ μ IDλ₯Ό μμ±νλ μ λ’°ν μ μλ λ©μ»€λμ¦μ μ 곡ν¨μΌλ‘μ¨, μ΄ ν μ ARIA μμ±μ ꡬννκ³ React μ ν리μΌμ΄μ μ μ κ·Όμ±μ ν₯μμν€λ κ³Όμ μ λ¨μνν©λλ€.
- μ±λ₯ μ΅μ ν: μ΄ ν μ μ±λ₯μ μΌλμ λκ³ κ΅¬νλμ΄ ID μμ±μ μ€λ²ν€λλ₯Ό μ΅μνν©λλ€.
- κ°λ° λ¨μν:
useOpaqueIdentifier
λ κ°λ°μκ° μ»€μ€ν ID μμ± λ‘μ§μ μμ±νκ³ μ μ§λ³΄μν νμλ₯Ό μμ μ£Όμ΄ μ½λ 볡μ‘μ±μ μ€μ΄κ³ μ μ§λ³΄μμ±μ ν₯μμν΅λλ€.
useOpaqueIdentifier
μ¬μ© λ°©λ²
useOpaqueIdentifier
λ₯Ό μ¬μ©νκΈ° μ μ, μ€νμ κΈ°λ₯μ ν¬ν¨νλ λ²μ μ Reactλ₯Ό μ¬μ©ν΄μΌ ν©λλ€. μ΄λ μΌλ°μ μΌλ‘ Reactμ μΉ΄λ리 λλ μ€νμ λΉλλ₯Ό μ¬μ©νλ κ²μ ν¬ν¨ν©λλ€. μ€νμ κΈ°λ₯μ νμ±ννλ ꡬ체μ μΈ μ§μΉ¨μ 곡μ React λ¬Έμλ₯Ό νμΈνμΈμ. μ€νμ κΈ°λ₯μ΄λ―λ‘ APIλ ν₯ν 릴리μ€μμ λ³κ²½λ μ μμ΅λλ€.
μ€νμ κΈ°λ₯μ νμ±ννλ€λ©΄, λ€μκ³Ό κ°μ΄ ν μ κ°μ Έμ μ¬μ©ν μ μμ΅λλ€:
```javascript import { useOpaqueIdentifier } from 'react'; function MyComponent() { const id = useOpaqueIdentifier(); return (μ΄ μμ μμ, useOpaqueIdentifier
λ MyComponent
ν¨μ μ»΄ν¬λνΈ λ΄μμ νΈμΆλ©λλ€. μ΄ ν
μ κ³ μ IDλ₯Ό λ°ννλ©°, μ΄ IDλ label
κ³Ό input
μμλ₯Ό μ°κ²°νλ λ° μ¬μ©λ©λλ€. μ΄λ νΉν 보쑰 κΈ°μ μ μ¬μ©νλ μ¬μ©μλ€μ μν΄ λ μ΄λΈμ΄ μ
λ ₯ νλλ₯Ό μ¬λ°λ₯΄κ² μλ³νλλ‘ λ³΄μ₯ν©λλ€.
μ€μ μ¬μ© μ¬λ‘
useOpaqueIdentifier
λ κ³ μ IDκ° νμν λ€μν μλ리μ€μ μ μ©λ μ μμ΅λλ€:
- μ κ·Όμ± μλ νΌ: μ΄μ μμ μμ 보μ¬μ€ λ°μ κ°μ΄, μ΄ ν μ λ μ΄λΈμ μ λ ₯ νλμ μ°κ²°νμ¬ μ₯μ κ° μλ μ¬μ©μμ μ κ·Όμ±μ 보μ₯νλ λ° μ¬μ©λ μ μμ΅λλ€.
- μμ½λμΈ λ° ν: μμ½λμΈμ΄λ ν μΈν°νμ΄μ€λ₯Ό ꡬννλ μ»΄ν¬λνΈμμ
useOpaqueIdentifier
λ₯Ό μ¬μ©νμ¬ ν€λμ μ½ν μΈ μμμ λν κ³ μ IDλ₯Ό μμ±ν μ μμΌλ©°, μ΄λ₯Ό ν΅ν΄aria-controls
λ°aria-labelledby
μ κ°μ ARIA μμ±μ μ¬λ°λ₯΄κ² μ¬μ©ν μ μμ΅λλ€. μ΄λ μ€ν¬λ¦° 리λ μ¬μ©μκ° μ΄λ¬ν μ»΄ν¬λνΈμ ꡬ쑰μ κΈ°λ₯μ μ΄ν΄νλ λ° μ€μν©λλ€. - λͺ¨λ¬ λνμμ: λͺ¨λ¬ λνμμλ₯Ό λ§λ€ λ
useOpaqueIdentifier
λ₯Ό μ¬μ©νμ¬ λνμμ μμμ λν κ³ μ IDλ₯Ό μμ±ν μ μμΌλ©°, μ΄λ₯Ό ν΅ν΄aria-describedby
μ κ°μ ARIA μμ±μ μ¬μ©νμ¬ λνμμμ λͺ©μ μ λν μΆκ° μ 보λ₯Ό μ 곡ν μ μμ΅λλ€. - 컀μ€ν
UI μ»΄ν¬λνΈ: λ΄λΆ κ΄λ¦¬λ μ κ·Όμ± λͺ©μ μΌλ‘ κ³ μ IDκ° νμν 컀μ€ν
UI μ»΄ν¬λνΈλ₯Ό ꡬμΆνλ κ²½μ°,
useOpaqueIdentifier
λ μ λ’°ν μ μκ³ μΌκ΄λ μ루μ μ μ 곡ν μ μμ΅λλ€. - λμ λͺ©λ‘: νλͺ© λͺ©λ‘μ λμ μΌλ‘ λ λλ§ν λ κ° νλͺ©μ κ³ μ IDκ° νμν μ μμ΅λλ€.
useOpaqueIdentifier
λ μ΄ κ³Όμ μ λ¨μννμ¬ λͺ©λ‘μ΄ μ λ°μ΄νΈλκ±°λ λ€μ λ λλ§λ λμλ κ° νλͺ©μ΄ κ³ μ ν IDλ₯Ό λ°λλ‘ λ³΄μ₯ν©λλ€. μλ₯Ό λ€μ΄, μ μμκ±°λ μΉμ¬μ΄νΈμμ μ ν κ²μ κ²°κ³Όλ₯Ό νμνλ κ²½μ°λ₯Ό μκ°ν΄λ³΄μΈμ. κ° μ ν λͺ©λ‘μ `useOpaqueIdentifier`μ μν΄ μμ±λ IDλ₯Ό μ¬μ©νμ¬ μ κ·Όμ± λͺ©μ λ° μνΈμμ© μΆμ μ μν΄ κ³ μ νκ² μλ³λ μ μμ΅λλ€.
κ³ κΈ μ¬μ©λ² λ° κ³ λ €μ¬ν
useOpaqueIdentifier
λ μ¬μ©νκΈ° λΉκ΅μ κ°λ¨νμ§λ§, μΌλμ λμ΄μΌ ν λͺ κ°μ§ κ³ κΈ κ³ λ €μ¬νμ΄ μμ΅λλ€:
- ID μ λμ¬ λΆμ΄κΈ°: κ²½μ°μ λ°λΌ νμ΄μ§μ λ€λ₯Έ IDμμ μ μ¬μ μΆ©λμ νΌνκΈ° μν΄ μμ±λ IDμ νΉμ λ¬Έμμ΄μ μ λμ¬λ‘ λΆμ΄κ³ μΆμ μ μμ΅λλ€.
useOpaqueIdentifier
λ μ λμ¬ λΆμ΄κΈ°λ₯Ό μ§μ μ§μνμ§ μμ§λ§, μμ±λ IDλ₯Ό μνλ μ λμ¬μ μ°κ²°νμ¬ μ½κ² ꡬνν μ μμ΅λλ€: ```javascript import { useOpaqueIdentifier } from 'react'; function MyComponent() { const id = useOpaqueIdentifier(); const prefixedId = `my-component-${id}`; return ( - μλ² μ¬μ΄λ λ λλ§ λ° νμ΄λλ μ΄μ
: μλ² μ¬μ΄λ λ λλ§κ³Ό ν¨κ»
useOpaqueIdentifier
λ₯Ό μ¬μ©ν λ, ν΄λΌμ΄μΈνΈ μΈ‘κ³Ό μλ² μΈ‘ νκ²½μ΄ μ¬λ°λ₯΄κ² ꡬμ±λμλμ§ νμΈνλ κ²μ΄ μ€μν©λλ€. Reactμ νμ΄λλ μ΄μ λ©μ»€λμ¦μ μλ²μμ μμ±λ IDκ° ν΄λΌμ΄μΈνΈμμ μμ±λ IDμ μΌμΉνλ κ²μ μμ‘΄ν©λλ€. λΆμΌμΉκ° λ°μνλ©΄ μ¬μ©μ κ²½νμ λΆμ μ μΈ μν₯μ λ―ΈμΉ μ μλ νμ΄λλ μ΄μ μ€λ₯κ° λ°μν μ μμ΅λλ€. μλ² μ¬μ΄λ λ λλ§ μ€μ μ΄ React 컨ν μ€νΈλ₯Ό μ¬λ°λ₯΄κ² μ΄κΈ°ννκ³useOpaqueIdentifier
κ° μ λλ‘ μλνλ λ° νμν νκ²½ λ³μλ₯Ό μ 곡νλμ§ νμΈνμΈμ. μλ₯Ό λ€μ΄, Next.jsλ₯Ό μ¬μ©νλ€λ©΄ μλ² μ¬μ΄λ λ λλ§ λ‘μ§μ΄ Reactμ 컨ν μ€νΈ APIλ₯Ό μ¬μ©νμ¬ ID μνμ€λ₯Ό μ μ§νλλ‘ μ¬λ°λ₯΄κ² ꡬμ±λμλμ§ νμΈν΄μΌ ν©λλ€. - μ±λ₯μ λ―ΈμΉλ μν₯:
useOpaqueIdentifier
λ μ±λ₯μ μ΅μ νλμ΄ μμ§λ§, νΉν ν¬κ³ 볡μ‘ν μ ν리μΌμ΄μ μμλ μ μ¬μ μΈ μν₯μ μΌλμ λλ κ²μ΄ μ¬μ ν μ€μν©λλ€. μ±λ₯μ΄ μ€μν μ»΄ν¬λνΈ λ΄μμ ν μ κ³Όλνκ² νΈμΆνμ§ λ§μΈμ. λμΌν λ λλ§ μ£ΌκΈ° λ΄μμ μμ±λ IDκ° μ¬λ¬ λ² μ¬μ©λλ κ²½μ° IDλ₯Ό μΊμ±νλ κ²μ κ³ λ €ν΄ λ³΄μΈμ. - μ€λ₯ μ²λ¦¬: λλ¬Όμ§λ§, ID μμ± κ³Όμ μμ λ°μν μ μλ μ μ¬μ μΈ μ€λ₯λ₯Ό μ²λ¦¬ν μ€λΉλ₯Ό νμΈμ. μκΈ°μΉ μμ λ¬Έμ λ₯Ό μννκ² μ²λ¦¬νκΈ° μν΄, νΉν μ΄κΈ° μ€μ μ€μ μ»΄ν¬λνΈ λ‘μ§μ try-catch λΈλ‘μΌλ‘ κ°μΈμΈμ.
- μ€νμ κΈ°λ₯μ΄λΌλ νΉμ±:
useOpaqueIdentifier
κ° μ€νμ κΈ°λ₯μ΄λΌλ μ μ λͺ μ¬νμΈμ. λ°λΌμ APIμ λμμ ν₯ν React 릴리μ€μμ λ³κ²½λ μ μμ΅λλ€. νμν κ²½μ° μ½λλ₯Ό κ·Έμ λ§κ² μμ ν μ€λΉλ₯Ό νμΈμ. ν μ λν λ³κ²½ μ¬νμ κ³μ νμ νλ €λ©΄ μ΅μ React λ¬Έμμ λ¦΄λ¦¬μ€ λ ΈνΈλ₯Ό νμΈνμΈμ.
useOpaqueIdentifier
μ λμ
useOpaqueIdentifier
κ° κ³ μ IDλ₯Ό μμ±νλ νΈλ¦¬νκ³ μ΅μ νλ μ루μ
μ μ 곡νμ§λ§, νΉμ μꡬ μ¬νκ³Ό μ μ½ μ‘°κ±΄μ λ°λΌ κ³ λ €ν μ μλ λ€λ₯Έ μ κ·Ό λ°©μλ μμ΅λλ€:
- UUID λΌμ΄λΈλ¬λ¦¬:
uuid
μ κ°μ λΌμ΄λΈλ¬λ¦¬λ λ²μ© κ³ μ μλ³μ(UUID)λ₯Ό μμ±νλ ν¨μλ₯Ό μ 곡ν©λλ€. UUIDλ μλ‘ λ€λ₯Έ μμ€ν κ³Ό νκ²½μμ κ³ μ ν¨μ΄ 보μ₯λ©λλ€. κ·Έλ¬λ UUID μμ±μ νΉν λ§μ μμ IDλ₯Ό μμ±ν΄μΌ ν κ²½μ° μ±λ₯ λ©΄μμ μλμ μΌλ‘ λΉμ©μ΄ λ§μ΄ λ€ μ μμ΅λλ€. λν, UUIDλ μΌλ°μ μΌλ‘useOpaqueIdentifier
κ° μμ±νλ IDλ³΄λ€ κΈΈκΈ° λλ¬Έμ κ²½μ°μ λ°λΌ λ¬Έμ κ° λ μ μμ΅λλ€. κΈλ‘λ² νν ν¬ μ ν리μΌμ΄μ μ μ§λ¦¬μ μΌλ‘ λΆμ°λ μ¬λ¬ μμ€ν μμ μλ³μκ° κ³ μ ν΄μΌ νλ κ²½μ° UUIDλ₯Ό μ¬μ©ν μ μμ΅λλ€. - 컀μ€ν
ID μΉ΄μ΄ν°: Reactμ
useState
λuseRef
ν μ μ¬μ©νμ¬ μμ λ§μ ID μΉ΄μ΄ν°λ₯Ό ꡬνν μ μμ΅λλ€. μ΄ μ κ·Ό λ°©μμ ID μμ± νλ‘μΈμ€λ₯Ό λ μ μ μ΄ν μ μκ² ν΄μ£Όμ§λ§, ꡬννκ³ μ μ§ κ΄λ¦¬νλ λ° λ λ§μ λ Έλ ₯μ΄ νμν©λλ€. ID μΆ©λμ νΌνκΈ° μν΄ μΉ΄μ΄ν°κ° μ¬λ°λ₯΄κ² μ΄κΈ°νλκ³ μ¦κ°λλμ§ νμΈν΄μΌ ν©λλ€. λν, μλ²μ ν΄λΌμ΄μΈνΈ κ°μ μΌκ΄μ±μ 보μ₯νκΈ° μν΄ μλ² μ¬μ΄λ λ λλ§κ³Ό νμ΄λλ μ΄μ μ μ¬λ°λ₯΄κ² μ²λ¦¬ν΄μΌ ν©λλ€. - CSS-in-JS μ루μ : Styled Componentsμ κ°μ μΌλΆ CSS-in-JS λΌμ΄λΈλ¬λ¦¬λ κ³ μ ν ν΄λμ€ μ΄λ¦μ μμ±νλ λ©μ»€λμ¦μ μ 곡ν©λλ€. μ΄λ¬ν λ©μ»€λμ¦μ νμ©νμ¬ μ»΄ν¬λνΈμ λν κ³ μ IDλ₯Ό μμ±ν μ μμ΅λλ€. κ·Έλ¬λ μ΄ μ κ·Ό λ°©μμ CSSμ κ΄λ ¨ μλ λͺ©μ μΌλ‘ IDλ₯Ό μμ±ν΄μΌ νλ κ²½μ°μλ μ ν©νμ§ μμ μ μμ΅λλ€.
μ μμ μΈ μ κ·Όμ± κ³ λ €μ¬ν
useOpaqueIdentifier
λ λ€λ₯Έ ID μμ± κΈ°μ μ μ¬μ©ν λ, μ μμ μΈ μ κ·Όμ± νμ€κ³Ό λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νλ κ²μ΄ μ€μν©λλ€:
- ARIA μμ±:
aria-labelledby
,aria-describedby
,aria-controls
μ κ°μ ARIA μμ±μ μ¬μ©νμ¬ μ»΄ν¬λνΈμ λν μλ―Έ μ 보λ₯Ό μ 곡νμΈμ. μ΄λ¬ν μμ±μ μμλ₯Ό μλ‘ μ°κ²°νκΈ° μν΄ κ³ μ IDμ μμ‘΄ν©λλ€. - μΈμ΄ μ§μ: μ ν리μΌμ΄μ μ΄ μ¬λ¬ μΈμ΄λ₯Ό μ§μνλμ§ νμΈνμΈμ. IDλ₯Ό μμ±ν λ λͺ¨λ μΈμ΄μμ μ§μλμ§ μμ μ μλ λ¬Έμλ μ¬μ©νμ§ λ§μΈμ.
- μ€ν¬λ¦° 리λ νΈνμ±: μμ±λ IDκ° μ₯μ κ° μλ μ¬μ©μμκ² μ¬λ°λ₯΄κ² ν΄μλκ³ μλ €μ§λμ§ νμΈνκΈ° μν΄ λ€μν μ€ν¬λ¦° 리λλ‘ μ ν리μΌμ΄μ μ ν μ€νΈνμΈμ. μΈκΈ° μλ μ€ν¬λ¦° 리λλ‘λ NVDA, JAWS, VoiceOverκ° μμ΅λλ€. λ€λ₯Έ μ§μμμ λ ννκ² μ¬μ©λλ νΉμ μ€ν¬λ¦° 리λ(μ: μ λ½μ΄λ μμμμμ λ μΌλ°μ μΈ μ€ν¬λ¦° 리λ)λ₯Ό μ¬μ©νμ¬ ν μ€νΈνλ κ²μ κ³ λ €ν΄ λ³΄μΈμ.
- ν€λ³΄λ λ€λΉκ²μ΄μ : μ ν리μΌμ΄μ μ΄ ν€λ³΄λλ₯Ό μ¬μ©νμ¬ μμ ν νμ κ°λ₯νμ§ νμΈνμΈμ. κ³ μ IDλ ν¬μ»€μ€ λ° ν€λ³΄λ μνΈμμ©μ κ΄λ¦¬νλ λ° μ¬μ©λ μ μμ΅λλ€.
- μμ λλΉ: ν μ€νΈμ λ°°κ²½μ μμ λλΉκ° μ κ·Όμ± κ°μ΄λλΌμΈμ μΆ©μ‘±νλμ§ νμΈνμΈμ. ID μμ±κ³Ό μ§μ μ μΈ κ΄λ ¨μ μμ§λ§, μμ λλΉλ μ λ°μ μΈ μ κ·Όμ±μ μ€μν μΈ‘λ©΄μ λλ€.
μμ : μ κ·Όμ± μλ μμ½λμΈ μ»΄ν¬λνΈ κ΅¬μΆνκΈ°
useOpaqueIdentifier
λ₯Ό μ¬μ©νμ¬ μ κ·Όμ± μλ μμ½λμΈ μ»΄ν¬λνΈλ₯Ό ꡬμΆνλ λ°©λ²μ 보μ¬λλ¦¬κ² μ΅λλ€:
μ΄ μμ μμλ useOpaqueIdentifier
λ₯Ό μ¬μ©νμ¬ μμ½λμΈ ν€λμ μ½ν
μΈ μμμ λν κ³ μ IDλ₯Ό μμ±ν©λλ€. aria-expanded
λ° aria-controls
μμ±μ ν€λλ₯Ό μ½ν
μΈ μ μ°κ²°νλ λ° μ¬μ©λμ΄ μ€ν¬λ¦° 리λκ° μμ½λμΈμ μνλ₯Ό μ¬λ°λ₯΄κ² μ릴 μ μλλ‘ ν©λλ€. aria-labelledby
μμ±μ μ½ν
μΈ λ₯Ό ν€λμ μ°κ²°νμ¬ μ€ν¬λ¦° 리λ μ¬μ©μμκ² μΆκ°μ μΈ λ§₯λ½μ μ 곡ν©λλ€. hidden
μμ±μ μμ½λμΈμ μνμ λ°λΌ μ½ν
μΈ μ κ°μμ±μ μ μ΄νλ λ° μ¬μ©λ©λλ€.
κ²°λ‘
useOpaqueIdentifier
ν
μ React μ ν리μΌμ΄μ
μμ ID μμ±μ λ¨μννκ³ μ΅μ ννλ λ° μμ΄ μ€μν μ§μ μ λνλ
λλ€. λ΄μ₯λ SSR νΈν λ° μ κ·Όμ± μ€μ¬μ μ루μ
μ μ 곡ν¨μΌλ‘μ¨, μ΄ ν
μ κ°λ°μκ° μ»€μ€ν
ID μμ± λ‘μ§μ μμ±νκ³ μ μ§λ³΄μν νμλ₯Ό μμ μ£Όμ΄ μ½λ 볡μ‘μ±μ μ€μ΄κ³ μ μ§λ³΄μμ±μ ν₯μμν΅λλ€. λΉλ‘ μ€νμ κΈ°λ₯μ΄κ³ λ³κ²½λ μ μμ§λ§, useOpaqueIdentifier
λ μ κ·Όμ±, μλ² μ¬μ΄λ λ λλ§, μ»΄ν¬λνΈ μ¬μ¬μ©μ±κ³Ό κ΄λ ¨λ μΌλ°μ μΈ λ¬Έμ λ€μ ν΄κ²°νλ μ λ§ν μ κ·Ό λ°©μμ μ 곡ν©λλ€. React μνκ³κ° κ³μ λ°μ ν¨μ λ°λΌ, useOpaqueIdentifier
μ κ°μ λꡬλ₯Ό μμ©νλ κ²μ μ μΈκ³ κ³ κ°μ λ§μ‘±μν€λ κ²¬κ³ νκ³ μ±λ₯μ΄ λ°μ΄λλ©° μ κ·Όμ± λμ μΉ μ ν리μΌμ΄μ
μ ꡬμΆνλ λ° μ€μν κ²μ
λλ€.
μ€νμ κΈ°λ₯κ³Ό κ·Έ μ¬μ©λ²μ λν μ΅μ μ 보λ₯Ό μ»μΌλ €λ©΄ νμ 곡μ React λ¬Έμλ₯Ό μ°Έμ‘°νμΈμ. λν, μ ν리μΌμ΄μ μ΄ λͺ¨λ μ¬μ©μμ λ₯λ ₯μ΄λ μ§λ¦¬μ μμΉμ κ΄κ³μμ΄ μ¬μ© κ°λ₯νκ³ μ κ·Ό κ°λ₯νλλ‘ μ² μ ν ν μ€νΈμ μ κ·Όμ± κ°μ¬λ₯Ό μ°μ μνμΈμ.