@ne_zhizn_a_malina

Нужен совет касаемо redux form. Как добаить событие onBlur на два тега?

Я для практики пишу поиск стран
У меня есть компонента SearchForm, у которой есть input, где и надо вводить названия стран. При каждом вводе срабатывает onChange и выводиться список стран под этим inputом. Этот список состоит из NavLinkов, при нажатии на соответствующий навлинк должна выводиться информация про страну. Но также я хочу, что бы при клике в любое место, кроме формы и самого списка этот список пропадал, для этого я добавил событие onBlur на input и с помощью css скрываю этот список, но изза этого я не могу кликать на сам список, потому что он сразу же исчезает. Можете пожалуйста дать совета, что делать в этом случае))
Вот код:
import React, { useState } from "react";
import { NavLink } from "react-router-dom";
import { Field, reduxForm } from "redux-form";
import styles from "./SearchPage.module.css";

const Search = (props) => {
    
    let countryList = [];
     let [classes, setClasses] = useState({activeFocusForm: null, activeList: null});
    if (props.countries.length > 0) {
        countryList = props.countries.map((item) => <NavLink to={`/${item.properties.name}`} className={styles.countryItem}>{item.properties.name}</NavLink>)
    } else {
        countryList = <div className={styles.nothingFound}>Nothing found</div>
    }
    const countrySearch = (event, newValue) => {
        props.getCountries(newValue);
        setClasses({activeFocusForm: "focusActive", activeList: "listCountry"})
    }
    
    return (
        <>
            <h1>City Search</h1>
            <div className={styles.searchWrapper}>
                <SearchReduxForm 
                countrySearch={countrySearch} 
                activeFocusForm={classes.activeFocusForm} 
                onBlur={() => {
                    setClasses({activeFocusForm: null, activeList: "listCountryDisabled"})
                }} 
                onFocus={() => {setClasses({activeFocusForm: "focusActive", activeList: "listCountry"})}}/>
                <div className={styles[classes.activeList]}>{countryList}</div>
            </div>
        </>
    )
}

const SearchForm = (props) => {
    return (
        <form className={styles.decor} >
            <div className={styles.formInner + " " + styles[props.activeFocusForm]}>
                <Field 
                autocomplete="off" 
                placeholder="Enter the name of the city" 
                component="input" 
                name="search" 
                onChange={props.countrySearch} 
                // onBlur={props.onBlur} 
                onFocus={props.onFocus}/>
            </div>
            
        </form>
    )
}


const SearchReduxForm = reduxForm({ form: "search" })(SearchForm);
export default Search;
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ответы на вопрос 1
vmakhnyuk
@vmakhnyuk
Frontend developer
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы