【发布时间】:2021-01-30 20:35:03
【问题描述】:
大家早上好,
我刚刚完成了 React 培训,我想制作一个项目来练习。 首先,我只是在 firebase 数据库中发布数据。 然后,我想获取数据以使用钩子(useState 和 useEffect)将其显示在反应组件中。
问题是我在使用 axios 获取数据后陷入了经典的无限循环陷阱,但我不知道如何通过依赖来阻止它。
请在下面找到代码:
import React, {useState} from 'react'
import {useEffect} from 'react'
import classes from './Incomes.module.css'
import axios from '../../../axios'
import Button from '../../UI/Button/Button'
import Input from '../../UI/Input/Input'
const Incomes = (props) => {
const [inputValue, setInputValue] = useState('');
const [fetchedTypes, setFetchedTypes] = useState([]);
const onClickHandler = () => {
const type = {type: inputValue}
axios.post('/types.json', type)
.then(response => {
alert('ok c good');
})
.catch(error => console.log(error))
}
const onChangeHandler = (event) => {
setInputValue(event.target.value)
}
useEffect(() => {
axios.get('/types.json')
.then(response => {
let types = []
for(let key in response.data) {
types.push({...response.data[key], id: key})
}
console.log('types : ', types)
setFetchedTypes(prevFetchedTypes => [...prevFetchedTypes, types])
})
.catch(error => console.log(error))
console.log('fetchedtypes', fetchedTypes)
}, [fetchedTypes])
return (
<div className={classes.Incomes}>
<h2>Paramètres des entrées</h2>
<h3>Ajouter un type de revenu</h3>
<Input type="text" disabled={false} change={onChangeHandler} placeholder="Nom du champ"></Input>
<Button onClick={onClickHandler} type="Normal" clicked={onClickHandler}>Ajouter</Button>
<h3>Liste des types de revenus disponibles</h3>
</div>
)
}
export default Incomes;
当我控制台日志类型时,数据是正确的。 但是当我控制台记录 fetchedTypes 时,它是一个空数组。
我找到了这篇文章,但它也不起作用: React useEffect infinite loop fetch data axios
我不确定这是否与我使用 useEffect 的方式或我更新状态的方式有关,或两者兼而有之。
感谢您的帮助
祝你有美好的一天
【问题讨论】:
标签: reactjs axios react-hooks use-effect