23 条回复  ·  322 次点击
wuyiccc 小成 2024-4-24 14:37:18
react 中 useState 是异步更新的
gaoryrt 小成 2024-4-24 14:38:59
const fetch = useCallback(() => {
  fetchMoreData(count)
}, [count])

这样行不行
evada 小成 2024-4-24 14:51:18
我觉得 4 楼没问题,可以把 count 当参数传递
santree 小成 2024-4-24 15:35:12
导致你这个问题的原因是因为在 React 里,setState 都会默认经过收集和批处理的流程,简单来说他不是立即生效的。

为了处理这个问题,如果你的 count 是一个和渲染相关的值,而且你必须要在 handleClick 时强行进行一次重置为 0 并请求最新值进行设置(也就是说界面上必须反映出这个 count -> 0 -> newCount )我的建议是使用 flushSync 这个 api 对状态设置进行包裹,强制同步更新一次状态。

like this:
```typescript
import { flushSync } from 'react-dom';

flushSync(() => {
  setCount(0);
});
```
具体可以查看文档: https://react.dev/reference/react-dom/flushSync
cookygg 小成 2024-4-24 15:51:28
const [count, setCount] = useState(0);

const [,update] = useState({})

const fetch = () => {
  fetchMoreData(count)
};

useEffect(() => {
  fetch();
}, [count]);

const handleClick = () => {
  // count 的值之前就是 0 ,上面的 useEffect 不触发
  setCount(0);

// 手动更新 也算一个解决
update({})
};
mwjz 小成 2024-4-24 16:19:45
封装一个 hooks , 既有 useState 也有 useRef ,  不过还是建议用 ahook 的 useRequest
june4 小成 2024-4-24 16:29:56
左转 solid-js ,可以 set 后马上 get, 最主要的是,视图函数只运行一次,再也没有这些操蛋的规则
zmaplex 小成 2024-4-24 17:55:25
用 swr

https://gist.github.com/zmaplex/6c4d4eacea1df7fcfccf3fe4c17f4a0a
mrwangjustsay 小成 2024-4-24 18:15:57
想研究的深一点可以参考: https://github.com/MrWangJustToDo/MyReact   https://i.imgur.com/XzEYBoY.png
realJamespond 小成 2024-4-24 18:17:56
加个方法 fetchAndCount(count) 包起来用
返回顶部