#javascript #reactjs #react-hooks
#javascript #reactjs #реагирующие крючки
Вопрос:
Я создаю компонент, который будет непрерывно извлекать данные из api
(при реальном использовании ответ займет некоторое время, поэтому он не будет вызываться постоянно)
Поэтому я создал этот пользовательский хук для этого
export const callUpdateApi = (url) => {
const [state, setState] = useState({ data: null, loading: true });
useEffect(() => {
setState(state => ({ data: state.data, loading: true }));
axios.get(url)
.then(x => {
return x.data
} , err => {
console.log('CALL UPDATE API ERROR ')
// timer to try again later if request fail
setTimeout(function(){
console.log('err status', err);
setState({...state , data: null})
} , 3000)
} )
.then(y => {
setState({ data: y, loading: false });
});
}, [state.data]);
return state;
};
затем, если я назову это, использование памяти будет увеличиваться с течением времени.
Если я настрою так, что мой api ответит быстро, через несколько минут моя память будет почти заполнена
Комментарии:
1. попробуйте useState({ data: null, loading: true }, [])
2. Вы запускаете этот код с открытыми инструментами отладки браузера? Если это так, вкладка Сеть будет фиксировать ответ на каждый запрос и занимать все больше и больше памяти с течением времени. В любом случае, я думаю, вам нужен какой-то механизм синхронизации, чтобы гарантировать, что ваша страница не будет повторно запрашивать серверную часть в быстром режиме. Это просто нехорошо.
3. Я предполагаю, что это были инструменты отладки, как вы упомянули, я новичок в интерфейсной разработке
4. Механизм синхронизации обрабатывается в моем бэкэнде