React Hook useEffect hat eine fehlende Abhängigkeit: 'Requisiten'

Sep 11 2020

Ich versuche, React Hooks zu verwenden (dies ist mein erstes Mal), aber ich erhalte diesen Fehler, wenn ich useEffect wie die obige KomponenteDidMount verwende: 'React Hook useEffect hat eine fehlende Abhängigkeit:' Requisiten '. Schließen Sie es entweder ein oder entfernen Sie das Abhängigkeitsarray. 'Requisiten' ändern sich jedoch, wenn sich eine Requisite ändert. Daher besteht die bevorzugte Lösung darin, das 'Requisiten'-Objekt außerhalb des useEffect-Aufrufs zu zerstören und auf diese spezifischen Requisiten innerhalb von useEffect zu verweisen.

Ich versuche, eine GET-Anfrage an eine API zu stellen, und dazu sind einige Requisiten in der URL erforderlich. Das ist mein Code:

function SomeComponent(props) {
  const [data, setData] = useState({});
  const [loading, setLoading] = useState(true);
  const [hasError, setErrors] = useState(false);
  
  useEffect(() => {
    async function fetchData() {
      try {
        let response = await Axios.get( `/some-url/${props.obj.id}/abc`,
          
        );
        let { data } = response.data;
        setData(data);
        setLoading(false);
        props.totalStats({data });
      } catch (error) {
        setErrors(error);
        setLoading(false);
      }
    }
    fetchData();
  }, []);
  }
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

Ich habe diese Lösungen gesucht und ausprobiert, aber sie funktionieren bei mir nicht:

const { id } = props.obj.id;
const {totalStats} = props.totalStats

useEffect(()=>{
//Here is the code
//I replace the $ {props.obj.id} by the id and the function props.totalStats by //totalStats
},[id,totalStats]

Auf diese Weise erhielt ich eine undefinierte ID und den Aufruf der Funktion.

Dann habe ich es so versucht:

useEffect(()=>{
//here is the code like the first one

},[props])

Dies führt jedoch zu n Anfragen an die API

Antworten

1 YunusTabakoglu Sep 11 2020 at 05:51

Entfernen Sie die geschweiften Klammern aus den konstanten Importen.

Es sollte also ungefähr so ​​aussehen:

function SomeComponent(props) {
  const objId = props.obj.id;
  const totalStats = props.totalStats;
  
  const [data, setData] = useState({});
  const [loading, setLoading] = useState(true);
  const [hasError, setErrors] = useState(false);
  
  useEffect(() => {
    async function fetchData() {
      try {
        let response = await Axios.get( `/some-url/${objId}/abc`,
          
        );
        let { data } = response.data;
        setData(data);
        setLoading(false);
        totalStats({data });
      } catch (error) {
        setErrors(error);
        setLoading(false);
      }
    }
    fetchData();
  }, [objId, totalStats]);
}