<input autoFocus />
λ ν΄λΌμ΄μΈνΈμμ μλνμ§λ§ μνλμμ λλ μλνμ§ μμ΅λλ€.
μ΄κ²μ νΉμν κ²½μ°λ‘ JSμμ ꡬνλμμ§λ§ hydrateInstance
λ .focus()
μ²λΌ finalizeChildren
.focus()
νΈμΆ ν μμλ μ»€λ° ν¨κ³Όλ₯Ό μμ½νμ§ μκΈ° λλ¬Έμ
λλ€.
μ¬κΈ°μ μ§λ¬Έμ λ μ΄μ JSμμμ΄λ₯Ό ꡬνν΄μΌνλμ§ μλλ©΄ SSRμμ autofocus
μμ±μ λ΄λ³΄λ΄κ³ λΈλΌμ°μ κ° μ²λ¦¬νλλ‘ν΄μΌ νλκ°μ
λλ€.
μλ μ΄μ μ μμ±μΌλ‘ λ΄ λ³΄λ΄μΌνλ€κ³ μκ°ν©λλ€.
μ£Όμ λ¨μ μ autofocus
κ° IE9, iOS Safari λ° Android λΈλΌμ°μ μμ μ§μλμ§ μλλ€λ κ² μ
λλ€. λ΄κ° λμΉ λ€λ₯Έ λ¨μ μ΄ μμ΅λκΉ? JSλ₯Ό ν΅ν΄ μλ μ΄μ μ μΆκ°νλ κ²μ΄ μΌλ§λ μ΄λ ΅κ±°λ κΈ°κ³μ μΈκ°?
μ°λ¦¬κ° νμ JSλ‘νλ€λ©΄, κ½€ μ½μ§λ§ μλ―Έλ‘ μλ κ½€ λλΉ λ³΄μ λλ€. μ€μ λ‘ μ΄μ μ λ§μΆκΈ° μ μ λͺ¨λ μ€ν¬λ¦½νΈκ°λ‘λλλ λ° μκ°μ΄ 걸릴 μ μμ΅λλ€. μ¬μ©μλ κ·Έ λμ λ€λ₯Έ κ²μ μ§μ€ν μ μμΌλ©° κ°μκΈ° μ§μ€λ©λλ€. Fiberλ₯Ό μ¬μ©νλ©΄ λΉλκΈ° μ μΌλ‘ μ¬μνν μ μκ³ λΆλΆ μνλ₯Ό μν μλ μκΈ° λλ¬Έμ μ΄λ―Έμλ κ²λ³΄λ€ λ λλΉ μ§ μ μμ΅λλ€.
λ λ€ ν μ μμ§λ§ μ΄μ μ λ§μΆ μμλ μ΄μν μΈκ³΅λ¬Όμ΄ μμ΅λλ€. μ€μμΉλ₯Ό λκ³ λ€μ μ΄μ μ λ§ μΆ₯λ λ€.
μ μμ μΈ κ²μ΄ μ€ν¨ν κ²½μ°μλ§ JSμμ μν ν μ μμ§λ§μ΄λ₯Ό κ°μ§νλ λ°©λ²μ λͺ¨λ₯΄κ³ λ§μ μ½λλ₯Ό μΆκ° ν μ μμ΅λλ€.
λΈλΌμ°μ μ§μ λ¬Έμ λ₯Ό κ°μν λ μ¬λ°λ₯Έ μ μΆ©μ΄ λ¬΄μμΈμ§ μ λͺ¨λ₯΄κ² μ΅λλ€.
μ€μ λ‘ μ΄μ μ λ§μΆκΈ° μ μ λͺ¨λ μ€ν¬λ¦½νΈκ°λ‘λλλ λ° μκ°μ΄ 걸릴 μ μμ΅λλ€.
λλ μ΄κ²μ΄ μμ±μ λ°©μΆνλ λ§€μ° κ°λ ₯ν μ¬λ‘λΌκ³ μκ°ν©λλ€. document.activeElement
νμΈνλλΌλ μ¬μ©μκ° μ΄λ―Έ νλ¦μ μκ±°λ νμ΄μ§λ₯Ό μλλ‘ μ€ν¬λ‘€νμ μ μμ΅λλ€. νμ΄μ§κ° μ ννκ±°λ ν€ μ
λ ₯ μ€κ°μ λ€λ₯Έ μ
λ ₯ μμμ μ
λ ₯μ μμνλ κ²μ μνμ§ μμ΅λλ€.
κ·Έ μ€ μΌλΆκ° μ¬ν΄μλΌλ©΄ λ―Έμνμ§λ§ λκ΅°κ°κ° κ·Έκ²μ λν΄ λ¬Έμ λ₯Ό μ κΈ°νλ©΄ λ΄κ° μ£Όμ₯ ν λ Όμμ΄ λ κ²μ λλ€.
μμ±μ λ°©μΆνλ κ²μ μ¬λ°λ₯Έ λ°©λ²μ²λΌ λ€λ¦½λλ€. μλ μ΄μ μ μ§μνμ§ μλ λΈλΌμ°μ μμ μλνλλ‘νλ €λ©΄ λ³Έλ¬Έ λμ μ€ν¬λ¦½νΈλ₯Ό μΆκ°νλ κ²μ΄ κ°μ₯ μ μμΈ κ² κ°μ΅λλ€.
<script>!function(el){el&&el.focus()}(document.querySelector('[autofocus]'))</script>
HTML νμ΄μ§κ° λ§€μ° ν° κ²½μ°μλ§ λ¬Έμ κ° λ°μνλ€κ³ μκ°ν©λλ€. λλ λν activeElementλ₯Ό κ²μ¬ ν μ μλ€κ³ μκ°ν©λλ€ (μκ±°λ bodyμ΄λ©΄ focus)νμ§λ§ κ³Όλ ν μ μμ΅λλ€.
autofocus-attributeλ₯Ό νμνμ§ μλ μ΄κΈ° μ΄μ λ λΈλΌμ°μ ꡬνμ΄ μ²λ¦¬ λ°©μμμ κ΄λ²μνκ² μΌκ΄μ±μ΄ μμκΈ° λλ¬Έμ λλ€ (μΌλΆλ μ§μνμ§ μκ³ μΌλΆλ νμ΄μ§λ‘λμλ§ μ΄μ μ λ§μΆλ λ±). IMHOλ μλ μ΄μ μ λν΄ μ§μ§ν μ¬λμ΄λΌλ©΄ μ΄μ¨λ JSλ₯Ό ν΅ν΄ μλμΌλ‘ μ μ©ν΄μΌ ν¨μ μλ―Έν©λλ€. κ·Έλ¬λ μ΄μ λ JS ν¬μ»€μ€λ₯Ό μ€μ λ‘ λ£μ§ μμ§λ§ μ΄λ μ λ μλ ν¬μ»€μ€λ₯Ό μ‘΄μ€νλ λͺ¨λ°μΌ λΈλΌμ°μ κ° μλ€λ κ²μ λ§μ°νκ² κΈ°μ΅ν©λλ€.
μλ§μ΄μ§λ§ μμ±μ λ΄λ³΄λ΄λ κ²μλ μ½κ°μ μ₯μ μ΄ μμΌλ©°, κ·Έκ²μ λν΄ κ°νκ² λλΌλ©΄ μλμΌλ‘ μ§μ€ν©λλ€. λͺ¨λ λκ΅¬κ° μ 곡λ©λλ€.
λλ μ΄κ² μ λν΄ λλμκ³ μ΄κ²μ΄ κ·Έλ΄λ―ν λ°©λ²μΌλ‘ λ€λ¦°λ€ κ³ μκ°ν©λλ€.
autoFocus
μμκ° λ κ° μ΄μ μΆκ°λλ©΄ κ²½κ³ ν©λλ€ (λΈλΌμ°μ λΆμΌμΉκ° λ°μνλ κ³³μ΄κΈ° λλ¬Έμ).μ΄κ² λ§μ΄ λΌ?
μ»€λ° μ€μ νλ μ΄μμ autoFocus μμκ° μΆκ° λ κ²½μ° κ²½κ³ ν©λλ€ (λΈλΌμ°μ λΆμΌμΉκ° λ°μνλ μμΉμ΄λ―λ‘).
μ μ΄λ μΌλ§ μ κΉμ§ λ§ν΄λ λΈλΌμ°μ λ autoFocus μμ±μ ν΄μνλ λ°©μμμλ μΌκ΄μ±μ΄ μμ΅λλ€. λλ μλ₯Ό λ€μ΄ FFκ° νμ΄μ§λ‘λμμλ§ κ·Έκ²μ μ‘΄μ€νκ³ λμ μΌλ‘ μ½μ λ κ²μ μμ ν 무μνλ€λ κ²μ μκ³ μμ΅λλ€. κ·Έλ¬λ λλ κ·Έκ²μ μ€λ«λμ μ‘°μ¬νμ§ μμμ΅λλ€.
κ·Έλλ μ κ·Ό λ°©μμ΄ μ³λ€κ³ μκ°ν©λλ€.
κΈ°λ³Έμ μΈ μ‘°μ¬ κ²°κ³Ό Safariλ₯Ό μ μΈν λλΆλΆμ μ΅μ λΈλΌμ°μ λ νμ΄μ§λ‘λ ν autoFocus
μ ν μ‘΄μ€νμ§ μλ κ²μ²λΌ 보μ
λλ€.
HTML λ¬Έμμλ μ΄μΉμ λ§μμ κ²μ
λλ€.νμ§λ§ μ±μμλ λμ μΌλ‘ μ½μ
λ μμμ λν΄ autoFocus
μ΄ κΈ°λ³Έμ μΌλ‘ SPAμ 첫 νμ΄μ§λ‘λλ§νΌ "νμ΄μ§ μ ν"μ΄κΈ° λλ¬Έμ μ‘΄μ€ λ κ²μΌλ‘ μμν©λλ€.
κ·Έλμ μ°λ¦¬λ μλ§λ polyfillμ μ μ§ν΄μΌ ν κ²μ λλ€.
λ μ΄μν΄μ§λλ€.
Chromeμ μ΄μ μ μμκ° μμλ κ²½μ° autoFocus
λμ μΌλ‘ μΆκ° λ μμλ₯Ό μ‘΄μ€ν©λλ€. autoFocus
λ‘ μ
λ ₯μ μμ±νκ³ λ¬Έμμ μΆκ°νκ³ λ€μ ν±μμ μ κ±°νλ κ²λ§μΌλ‘λ ν₯ν Chromeμμ μΆκ°λλ μμμ μλ μ΄μ μ λΉνμ±ν ν μ μμ΅λλ€.
Firefoxλ autoFocus
λ‘ λμ μΌλ‘ μΆκ° λ μμμ λν΄ μ ν μ κ²½ μ°μ§ μμ΅λλ€.
κ·Έλ¦¬κ³ Safariλ νμ κ·Έλ€μ μ‘΄μ€ν©λλ€.
https://github.com/facebook/react/pull/11192 μμ μμ λμμ΅λλ€
κ°μ₯ μ μ©ν λκΈ
autofocus-attributeλ₯Ό νμνμ§ μλ μ΄κΈ° μ΄μ λ λΈλΌμ°μ ꡬνμ΄ μ²λ¦¬ λ°©μμμ κ΄λ²μνκ² μΌκ΄μ±μ΄ μμκΈ° λλ¬Έμ λλ€ (μΌλΆλ μ§μνμ§ μκ³ μΌλΆλ νμ΄μ§λ‘λμλ§ μ΄μ μ λ§μΆλ λ±). IMHOλ μλ μ΄μ μ λν΄ μ§μ§ν μ¬λμ΄λΌλ©΄ μ΄μ¨λ JSλ₯Ό ν΅ν΄ μλμΌλ‘ μ μ©ν΄μΌ ν¨μ μλ―Έν©λλ€. κ·Έλ¬λ μ΄μ λ JS ν¬μ»€μ€λ₯Ό μ€μ λ‘ λ£μ§ μμ§λ§ μ΄λ μ λ μλ ν¬μ»€μ€λ₯Ό μ‘΄μ€νλ λͺ¨λ°μΌ λΈλΌμ°μ κ° μλ€λ κ²μ λ§μ°νκ² κΈ°μ΅ν©λλ€.
μλ§μ΄μ§λ§ μμ±μ λ΄λ³΄λ΄λ κ²μλ μ½κ°μ μ₯μ μ΄ μμΌλ©°, κ·Έκ²μ λν΄ κ°νκ² λλΌλ©΄ μλμΌλ‘ μ§μ€ν©λλ€. λͺ¨λ λκ΅¬κ° μ 곡λ©λλ€.