React hook 使用疑惑

devzhaoyou · 2024-4-24 14:16:56 · 309 次点击
```js
const [count, setCount] = useState(0);

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

const handleClick = () => {
  // 每次 fecth 前都要重置一下 count
  setCount(0);
  fetch()
};
```

这段代码 每次 handleClick 都要重置 count 的值为 0 ,然后使用 fetch 获取数据,fetch 会使用 count 的值;
如果上面的写法的问题是,count 在使用的时候并没有设置为 0

如果改为 useEffect 方式,如果 count 的值没有变化,又不会触发
```js
const [count, setCount] = useState(0);

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

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

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

所以,上面的这种情况该如何处理呢? 刚接触 react 感觉很简单的逻辑,在 react 里处理起来好复杂
举报· 309 次点击
登录 注册 站外分享
23 条回复  
chanChristin 小成 2024-4-24 14:20:19
应该是 useState 不会立即更新的问题,你可以换成 useRef 来确认一下,或者是在各处打印一下 useState 的值看看。
NessajCN 小成 2024-4-24 14:22:16
你没说你需求是啥
icoming 小成 2024-4-24 14:24:54
这样就行了:

const fetch = () => {
  fetchMoreData(0)
};
withoutxx 小成 2024-4-24 14:25:26
这种要看原始需求。。。
count 不变为什么需要再调用 fetch ,不清楚 fetch 具体逻辑。

简单点就第一种写法,fetch 直接接收 count 参数就可以。
xling 小成 2024-4-24 14:25:49
跟 react 的 fiber 有关,设置后不会立即更新,可以直接把正确的值传递到你需要的函数
jguo 小成 2024-4-24 14:26:04
你觉得复杂是因为自己都没有把逻辑理顺。先确定一个根本问题,在什么情况下需要调用 fetchMoreData 。
cat 小成 2024-4-24 14:26:39
修改前的问题:setCount 是异步的,它还没执行完就会执行 fetch 了;
修改后的问题:count 值没变化,一直都是 0 ,自然就不会再次触发 useEffect ;
codehz 初学 2024-4-24 14:28:29
网络请求建议直接上 swr 吧,你这个看起来是想做类似分页/无限加载+刷新的效果?那么 swr/infinite 里就可以做了,直接 setcount 然后再 revalidate ,不会有任何冲突,也能实现想要的效果。。。
iOCZS 小成 2024-4-24 14:29:59
你这个例子不好,你应该说你有个分页请求,刚进来请求 page=0 ,这时候可以下拉刷新,重新请求 page=0 ;也可以上拉加载 page=1
123下一页
返回顶部