Предупреждение об утечке памяти в функциональном компоненте
Привет, я получаю предупреждающее сообщение о своем функциональном компоненте react.
Предупреждение :
Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function
Ниже приведен мой функциональный компонент
import React, { useState, useEffect } from 'react'; import { ErrorMessage } from "formik"; import _ from 'lodash' import { Input } from "antd"; import './custom-input.less'; const InputSearchFilter = (props) => { const { placeholder, loading, arrayToFilter, value, name, onChange, onBlur, touched, label, row, err, disabled } = props; const [valueObject, setValueObject] = useState({ medicalSchool: null, medicalSchoolId: null }); const [showList, setShowList] = useState(false); const [filteredList, setFilteredList] = useState([]); return ( <div className="input__wrap InputSearchFilter"> {!(err && touched) ? label !== undefined && <div className="input__label"> {label}</div> : ""} <ErrorMessage name={name}> {errorMessage => <div className="input__error">{errorMessage}</div>} </ErrorMessage> <Input.Search rows={row} disabled={disabled} name={name} allowClear value={valueObject.medicalSchool && valueObject.medicalSchool} placeholder={placeholder} onChange={onChangeText} onBlur={(ev) => { onBlur(ev) setTimeout(() => { setShowList(false) }, 1000, [setShowList]); }} autoComplete="off" loading={loading} /> {showList && filteredList.length > 0 ? <div className="listContainer"> {filteredList.map((item, index) => { return ( <div style={{ display: 'contents' }} key={item.value} onClick={(e) => { // e.stopPropagation(); // e.preventDefault(); handleSelectListItem(item) }}> <div className="list-item" > {item.label} </div> {index - 1 < filteredList.length - 2 ? <span className='list-seperator' /> : null} </div> ) })} </div> : null} </div > ); } export default InputSearchFilter;
Что я уже пробовал:
этот компонент я использовал в форме formik внутри ящика. этот ящик закрывается, когда я щелкаю снаружи.
Я попытался удалить функцию onBlur, а затем она отключает предупреждение,
onBlur={(ev) => { onBlur(ev) setTimeout(() => { setShowList(false) }, 1000, [setShowList]); }}
но проблема в том, что я хочу, чтобы функция setShowList(false) выполнялась, когда я нажимаю за пределами текстового поля. Как я могу это сделать ?? Пожалуйста, предложите какую-нибудь идею.