не уверен, что заставляет меня получить эту ошибку React. Мое приложение работает, и мои слаги URL-адресов затронуты и работают, однако эта ошибка появляется, и я не совсем понимаю, почему?
Full Error:
Line 30:5: React Hook useEffect has a missing dependency: 'slug'. Either include it or remove the dependency array react-hooks/exhaustive-deps
Все, что я пытаюсь сделать, это передать данные API на мою страницу для рендеринга и создать параметр URL с моим slug
import React, { useState, useEffect } from 'react';
import axiosInstance from '../axios';
import { useParams } from 'react-router-dom';
//MaterialUI
import CssBaseline from '@material-ui/core/CssBaseline';
import { makeStyles } from '@material-ui/core/styles';
import Container from '@material-ui/core/Container';
import Typography from '@material-ui/core/Typography';
const useStyles = makeStyles((theme) => ({
paper: {
marginTop: theme.spacing(8),
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
},
}));
export default function Bucket() {
const { slug } = useParams();
const classes = useStyles();
const [data, setData] = useState({ bucket: [] });
useEffect(() => {
axiosInstance.get(slug).then((res) => {
setData({ bucket: res.data });
console.info(res.data);
});
}, [setData]); //this is where the error is
return (
<Container component = "main" maxWidth = "md">
<CssBaseline />
<div className = {classes.paper}></div>
<div className = {classes.heroContent}>
<Container maxWidth = "sm">
<Typography
component = "h1"
variant = "h2"
align = "center"
color = "textPrimary"
gutterBottom
>
{data.bucket.title}
</Typography>
<Typography
variant = "h5"
align = "center"
color = "textSecondary"
paragraph
>
{data.bucket.about}
</Typography>
</Container>
</div>
</Container>
);
}
Спасибо за помощь в отладке!
🤔 А знаете ли вы, что...
JavaScript обеспечивает обработку ошибок с использованием конструкции try...catch.
Вы просто добавляете его в массив зависимостей. Я дополнительно уточню, что slug
должна быть зависимостью, потому что вы хотите, чтобы useEffect запускался снова, если он изменится.
useEffect(() => {
axiosInstance.get(slug).then((res) => {
setData({ bucket: res.data });
console.info(res.data);
});
}, [setData, slug]);