Bevezetés
Azáltal, hogy egy elemre állítjuk a fókuszt, finoman a következő várható beviteli mezőre irányítjuk a felhasználót, így jobb böngészési élményt nyújtunk kevesebb találgatás mellett.
Ebből a cikkből megtudjuk, hogyan állíthat fókuszt egy elemre a React alkalmazás vagy egy React összetevő renderelése után.
A hagyományos HTML-ben könnyű volt beállítani egy elemet, amelyre fókuszálni kell a autofocus
attribútum a miénkben tag, amely egy logikai attribútum, és alapértelmezés szerint erre van beállítva
false
. Utasítja a böngészőt, hogy az adott beviteli mezőre összpontosítson, és a felhasználó azonnal megkezdheti az értékek beírását:
<form>
<input type="text" autofocus> // Will focus
<input type="text"> // Won't focus
</form>
Ez a React alkalmazásainkban is működni fog. Mégis, ha egy elemre szeretnénk fókuszálni a renderelés után, még programozottabb vezérléssel – használhatjuk a useEffect()
horog a funkcionális alkatrészekben és a componentDidMount()
életciklus-módszer osztálykomponensekben.
Hogyan állítsunk fókuszt az elemre a funkcionális komponensekben történő renderelés után
Korábban, a React hook bevezetése előtt, a Funkcionális komponensekkel nem tudtunk ilyen műveleteket kezelni.
A hoook bevezetése óta tudjuk, hogy az alkalmazásunk/összetevőnk mikor készült el teljesen, így konkrét műveleteket hajthatunk végre a useEffect()
horog. Hozzáférünk továbbá a useRef()
hook, amellyel közvetlenül hivatkozhatunk egy adott elemre.
Tegyük fel, hogy van egy űrlapunk két mezővel, és azt szeretnénk, hogy az egyik mező fókuszba kerüljön az összetevő megjelenítése után:
const App = () => {
return (
<div className='container'>
<form>
<input type="text" placeholder='This has focus' />
<input type="text" placeholder='No focus when we render' />
</form>
</div>
)
}
export default App;
Kezdjük azzal, hogy hivatkozást kapunk a bemenetre a useRef()
Reagálás horog. Ehhez először importálunk useRef()
a Reactból hozzon létre a ref
és alapértelmezés szerint állítsa az értékét nullra, majd csatolja a létrehozott ref
a React elemünkhöz a ref
tulajdonság:
import { useRef } from 'react';
const App = () => {
const inputReference = useRef(null);
return (
<div className='container'>
<form>
<input type="text" ref={inputReference} placeholder='This has focus' />
<input type="text" placeholder='No focus when we render' />
</form>
</div>
)
}
export default App;
Jegyzet: Figyeljük meg, hogy a létrehozott hivatkozást csak az egyik bemeneti elemhez csatoltuk, amelyre fókuszálni szeretnénk.
Most folytassuk a használatát useEffect()
horog az elem fókuszba helyezéséhez az alkalmazásunk renderelése után:
import { useRef, useEffect } from 'react'
const App = () => {
const inputReference = useRef(null);
useEffect(() => {
}, [])
return (
<div className='container'>
<form>
<input type="text" ref={inputReference} placeholder='This has focus' />
<input type="text" placeholder='No focus when we render' />
</form>
</div>
)
}
export default App;
A fenti kódban vegye észre, hogy importáltuk a useEffect()
hook-ot, majd kihasználta a hook-ot egy üres függőségi tömbbel ([]
). Végül, hogy a hivatkozott elemet fókuszba állítsuk, a ref-t a következőn keresztül érjük el current
attribútumot, majd csatolja a focus()
eljárás:
useEffect(() => {
inputReference.current.focus();
}, [])
Ezen a ponton, amikor alkalmazásunk vagy összetevőnk megjelenik, a hivatkozott elem automatikusan fókuszba kerül:
import { useRef, useEffect } from 'react';
const App = () => {
const inputReference = useRef(null);
useEffect(() => {
inputReference.current.focus();
}, []);
return (
<div className='container'>
<form>
<input type="text" ref={inputReference} placeholder='This has focus' />
<input type="text" placeholder='No focus when we render' />
</form>
</div>
)
}
export default App;
Hogyan állítsunk fókuszt az elemre az osztályösszetevőkben történő renderelés után
Eddig láttuk, hogyan állíthatunk fókuszt egy funkcionális komponenssel rendelkező elemre, de ez egy teljesen más szintaxis az osztályösszetevők esetében, mivel már nem használunk hook-okat, mert azok csak funkcionális komponensekben működnek. Az osztályösszetevőkben létrehozzuk a ref-ünket a constructor()
módszert és használja ki a componentDidMount()
metódus a hivatkozott elem fókuszálására, ha az alkalmazásunk megjelenik:
Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!
import React, { Component } from 'react';
export class App extends Component {
constructor(props) {
super(props);
this.inputReference = React.createRef();
}
componentDidMount() {
this.inputReference.current.focus();
}
render() {
return (
<div className='container'>
<form>
<input type="text" ref={this.inputReference} placeholder='This has focus' />
<input type="text" placeholder='No focus when we render' />
</form>
</div>
)
}
}
export default App;
A fenti kódban a constructor()
módszer a hivatkozás létrehozására, amelyet a bemeneti elemhez csatoltunk:
constructor(props) {
super(props);
this.inputReference = React.createRef();
}
Ezután használtuk a componentDidMount()
életciklus módszer, amely nagyon hasonlít a useEffect()
hook, hogy az elem fókuszban legyen, miután alkalmazásunk/összetevőnk megjeleníti:
componentDidMount() {
this.inputReference.current.focus();
}
Következtetés
Ebben a cikkben megtanultuk, hogyan állíthatunk be egy elemet fókuszba egy beviteli mező használatával, miután alkalmazásunk vagy összetevőnk az osztály és a funkcionális összetevőkben is megjelenik. Mindkét módszer ugyanaz, de eltérő a szintaxisuk, mivel két különböző típusú komponensről van szó.