React useEffect 导致死循环
React useEffect caused infinite loop
我搜索了很多post关于使用useEffect时的无限循环,但还是想不通
在 useEffect 中,我试图调用 get accounts api,当然,我放了一个空数组,因为我只需要它 运行 在渲染后一次。但目前我喜欢添加 'addAccount' 功能。所以,如果我按下添加按钮,它就会发送一个 post 请求。问题来了,我想检查这个值有没有变化,所以我把这个值放到第二个空数组的参数里,结果死循环了。但是,如果我保留空数组,我的屏幕不会重新呈现。
export default function BC() {
const [value, setValue] = useState([])
async function getBCAccount() {
const result = await axios.get("http://localhost:3004/accounts")
if(result) {
setValue(result.data)
}
}
async function createBCAccount() {
const result = await axios.post("http://localhost:3004/accounts", {
id: 5,
name: "mmm"
})
}
useEffect(()=> {
getBCAccount()
}, [])
const handleAddAccount = () => {
createBCAccount()
}
return (
<BcContainer>
<button onClick={handleAddAccount}>add</button>
{value && value.map((v)=> (
<AccountContainer key={v.id} to={`/bc/${v.id}`}>
<p>{v.name}</p>
<p>{v.coin} BTC</p>
</AccountContainer>
))}
</BcContainer>
)
我想你只是在 createBCAccount
中调用 getBCAccount
。在create
之后,您将再次调用get
数据来更新您的value
:
async function createBCAccount() {
await axios.post("http://localhost:3004/accounts", {
id: 5,
name: "mmm"
})
getBCAccount()
}
我搜索了很多post关于使用useEffect时的无限循环,但还是想不通
在 useEffect 中,我试图调用 get accounts api,当然,我放了一个空数组,因为我只需要它 运行 在渲染后一次。但目前我喜欢添加 'addAccount' 功能。所以,如果我按下添加按钮,它就会发送一个 post 请求。问题来了,我想检查这个值有没有变化,所以我把这个值放到第二个空数组的参数里,结果死循环了。但是,如果我保留空数组,我的屏幕不会重新呈现。
export default function BC() {
const [value, setValue] = useState([])
async function getBCAccount() {
const result = await axios.get("http://localhost:3004/accounts")
if(result) {
setValue(result.data)
}
}
async function createBCAccount() {
const result = await axios.post("http://localhost:3004/accounts", {
id: 5,
name: "mmm"
})
}
useEffect(()=> {
getBCAccount()
}, [])
const handleAddAccount = () => {
createBCAccount()
}
return (
<BcContainer>
<button onClick={handleAddAccount}>add</button>
{value && value.map((v)=> (
<AccountContainer key={v.id} to={`/bc/${v.id}`}>
<p>{v.name}</p>
<p>{v.coin} BTC</p>
</AccountContainer>
))}
</BcContainer>
)
我想你只是在 createBCAccount
中调用 getBCAccount
。在create
之后,您将再次调用get
数据来更新您的value
:
async function createBCAccount() {
await axios.post("http://localhost:3004/accounts", {
id: 5,
name: "mmm"
})
getBCAccount()
}