React Hook useEffect'in bağımlılığı eksik: 'fetchData'
Sep 23 2020
Bu hatayla ilgili biri bana yardımcı olabilir mi? In useEffect Ben bir istek ve ekler redoks durumunda tepki yapan bir işlevi çağırmak.
import React, { useEffect, useState } from "react";
import { BrowserRouter as Router, Switch, Route} from "react-router-dom";
import { useDispatch, useSelector } from 'react-redux'
import { actions } from './actions/actions'
import { I18nProvider } from './i18n'
import axios from 'axios'
import Home from './views/home/home';
import Page1 from './views/page1/page1';
import Page2 from './views/page2/page2'
import Page3 from './views/page3/page3'
const App = () => {
const [isLoading, setIsLoading] = useState(true)
const localeDefault = useSelector(state => state.audioGuideReducers.lang)
const dispatch = useDispatch()
const setDataRedux= (data) => dispatch(actions.setDataRedux(data))
useEffect(() => {
fetchData();
}, []);
const fetchData = async () => {
await axios.get('https://link-api.com/alldata')
.then((response) => {
setDataRedux(response.data.data)
setIsLoading(false)
})
.catch( (error) => {
console.log(error.message);
})
}
return (
<I18nProvider locale={localeDefault}>
<Router>
{
isLoading ?
<h1> Loading... </h1>
:
<Switch>
<Route path="/page3/:id" component={Page3} />
<Route path="/page2" component={Page2} />
<Route path="/page1" component={Page1} />
<Route path="/" component={Home} />
</Switch>
}
</Router>
</I18nProvider>
);
}
export default App
Uygulama "çalışıyor" olsa da, görünen şu uyarıyı çözmek istiyorum: " React Hook useEffect'in bağımlılığı eksik: 'fetchData'. Bunu ekleyin veya bağımlılık matrisi react-hooks / exaustive-deps'i kaldırın "
Yanıtlar
1 ShubhamVerma Sep 23 2020 at 17:31
Bunun nedeni, ne zaman kullanıyorsanız useEffectve useEffect dışında bir şey kullanıyorsanız. UseEffect'in ne zaman güncelleneceğinden emin olması gerekir, bu yüzden bağımlılığı içinde geçirmeniz gerekir:
useEffect(() => {
fetchData();
}, [fetchData]);
const fetchData = async () => {
await axios.get('https://link-api.com/alldata')
.then((response) => {
setDataRedux(response.data.data)
setIsLoading(false)
})
.catch( (error) => {
console.log(error.message);
})
}
Daha iyi yolu da sadece içinde gerekirse useEffectkoymak fetchDataiçi useEffect:
const setDataRedux = React.useCallback((data) => dispatch(actions.setDataRedux(data)), [])
useEffect(() => {
const fetchData = async () => {
await axios.get('https://link-api.com/alldata')
.then((response) => {
setDataRedux(response.data.data)
setIsLoading(false)
})
.catch( (error) => {
console.log(error.message);
})
}
fetchData();
}, [setDataRedux]);
1 akhtarvahid Sep 23 2020 at 17:29
Geçmek fetchDataiçin bir bağımsız değişken olarakuseEffect
useEffect(() => {
fetchData();
}, [fetchData]);
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı