v2.5.2
Giriş yap

Arama verilerini blur'dan koruyamıyorum

cantunc
259 defa görüntülendi

Bir arama motoru yaptım, motora en az 3 harf girince onunla ilgili diğer maddeler de gözüküyor. Ne zaman ki bu maddelerden birine tıkladığımızda bizi o sayfaya yönlendirmeli. Ancak eğer input odağını kaybederse bu maddeler de kaybolmalı. Klasik ekşisözlük arama motoru gibi düşünebilirsiniz.

Ben inputun odağını kontrol etmek için onFocus ve onBlur olaylarını kullandım. Ancak ilgili maddelere tıkladığımızda -bu maddeler alanı mutlak pozisyonda olduğundan- input odağını kaybettiği için maddeler kayboluyor. Bu sorunu nasıl aşabilirim? Kodlar (React):

odak kontrolü için gerekli gördüğüm state:

const [focused, setFocused] = useState(false)

Inputun jsx'i:

<input 
    className="search-input"
    type="text"
    placeholder="Karşılığını aratmak istediğiniz sözcüğü girin"
    onChange={e => setInputData(e.target.value)}
    onFocus={e => {
        setFocused(true)
    }}
    onBlur={e => setFocused(false)}
/>

İlgili maddelerin jsx'i:

<div 
    className="results"
    style={{
        display: `${(inputData.length >= 3 && focused) ? "block" : "none"}`
    }}
>
    {relatedWords.map(relatedWord => (
        <WordResult
            word={relatedWord}
            key={relatedWords.indexOf(relatedWord)} 
            />
        ))}
</div> 

Madde sayfasının css'i

width: 540px;
position: absolute;
top: 335px;
left: 475px;

Yardımlarınız için Teşekkürler

Cevap yaz
Cevaplar (1)
devepdogukan
444 gün önce

focused diye bir state oluşturmana gerek yok.WordResult componentine tıklanınca yönlendirmeni yap ve setInputData ' ı null olarak güncelle.Mantık olarak şuan yazdığın kodlar çalışması gerek ama bütün kodları göremediğimiz için başka bir sorun olabilir