Задать вопрос
@HitGirl

Почему не срабатывает проверка на первое монтирование?

Здравствуйте!
Подскажите, пожалуйста, почему при первом монтировании useEffect выводит в консоль сначала false, а затем true, хотя deferredInput не изменяется. Как сделать, так чтобы onInputChanged, вызывался только при изменении deferredInput?
const Search = ({onInputChanged,placeholder="",className=""}:{onInputChanged:(input:string)=>any,className?:string,placeholder?:string})=>{
    const isMounted = useRef(false)
    const [searchInput, setSearchInput] = useState("")
    const deferredInput = useDeferredValue(searchInput)



    useEffect(()=>{
        console.log(isMounted.current)
        if (isMounted.current){
            onInputChanged(deferredInput)
        }
        else {
            isMounted.current = true
        }


    },[deferredInput])


    return (
        <Input
            placeholder={placeholder ? placeholder:"Найдётся всё..."}
            value={searchInput}
            onChange={(e)=>setSearchInput(e.target.value)}
            className={"w-full"+className}
        />
    )
}

export default Search;
  • Вопрос задан
  • 94 просмотра
Подписаться 1 Простой 8 комментариев
Пригласить эксперта
Ответы на вопрос 1
Kentavr16
@Kentavr16
long cold winter
Если правильно понял желаемый результат - я бы сделал примерно так. Обрати внимание на то, как срабатывает сообщение в консоли.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 80 000 до 120 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽