Передача пустого массива в ваш хук говорит React, что ваша хук-функция не будет иметь никаких зависимых значений ни от props, ни от состояния.
useEffect(() => {
getRecentSheets();
}, [])
Бесконечное l oop возникает, когда вы объявляете диспетчер как зависимость от крючка. Когда компонент инициализирован, props.recentSheets
не был установлен и будет перезапущен, как только вы сделаете ваш AJAX вызов.
useEffect(() => {
getRecentSheets();
}, [getRecentSheets])
Вы можете попробовать что-то вроде этого:
const Home = ({recentSheets}) => {
const getRecentSheetsCallback = useCallback(() => {
getRecentSheets();
})
useEffect(() => {
getRecentSheetsCallback();
}, [recentSheets]) // We only run this effect again if recentSheets changes
return <SheetList sheets={ recentSheets } />
};
Независимо от того, сколько раз Homes выполняет повторную визуализацию, вы сохраняете запомненную функцию для своего вызова диспетчеризации.
В качестве альтернативы, вы можете столкнуться с тем, что можете найти похожие шаблоны, использующие локальное состояние, и затем сделать свой эффект "зависимым" от sheets
.
const [sheets, setSheets] = useState(recentSheets)
Надеюсь, это поможет