ReactHook 异步请求删除数据不能正确刷新问题,救救小白吧,被卡了一晚上

2020-09-04 23:15:50 +08:00
 qwertty01

点击一次删除时,不能刷新,点两次才能删除

export const WorkPage = () => {
    const [items, setItems] = useState([])
    const [update, setUpdate] = useState(false)

    const updateEvent = () => {
        console.log(update)
        setUpdate(!update)
    }

    useEffect(() => {
        axios.get(findAllUrl).then(response => {
            setItems(response.data)
        })
    }, [update])


    const deleteItemHandler = (event) => {
        axios.get(deleteByIdUrl, {
            params: {
                id: event.target.value
            }
        }).then(response => {
            console.log(response)
        })
        updateEvent()
    }
    
    return (
    	<div>
        	<ul>
            	{items.map(((item, index, array) =>
              		<li key={index}>{index + " " + item.content}
               			<button value={item.id}
                			onClick={e => deleteItemHandler(e)}>X
               			</button>
              		</li>
             		))}
            </ul>
        </div>
    )
}
1268 次点击
所在节点    问与答
10 条回复
lemon6
2020-09-04 23:28:37 +08:00
你的两个接口是同时调的,所以在执行删除操作的时候数据库还没有真正完成删除
qwertty01
2020-09-04 23:31:40 +08:00
@lemon6 有什么解决的办法吗?
qwertty01
2020-09-04 23:41:54 +08:00
@lemon6 感谢老哥,一语点醒梦中人。把 updateEvent()放到回调里就可以了。
iamppz
2020-09-04 23:42:09 +08:00
update 放 then 里面啊
aaronlam
2020-09-05 00:38:18 +08:00
感觉是不是用 aysnc await 就不会那么容易出现这种失误了呢。。
Blacate
2020-09-05 02:14:31 +08:00
推荐 react-query 或 useswr 贼香
qwertty01
2020-09-05 09:08:55 +08:00
@iamppz 嗯,是这样解决的
qwertty01
2020-09-05 09:09:53 +08:00
@Blacate 我这就去学 T - T
shmilwdc
2020-09-05 13:23:29 +08:00
虽然我只懂点前端 但我也知道异步更新操作得放在 promise 的 then 里 😂
ike
2020-09-05 13:52:40 +08:00
虽然与问题无关,delete 不能用 get 请求吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/704356

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX