You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何改写onSelectWallet实现钱包的选中切换(数组增删)功能?

实现多选钱包的切换选中功能

你可以通过函数式更新结合数组的过滤/拼接操作来实现这个切换逻辑,核心是利用setSelectedWallet的回调参数获取最新状态,同时通过钱包的唯一标识(比如id)判断是否已选中:

const onSelectWallet = useCallback((wallet: SyncedWalletData) => {
  setSelectedWallet(prevSelected => {
    // 检查当前钱包是否已在选中列表中(这里假设钱包有唯一的id属性,根据实际情况替换)
    const isAlreadySelected = prevSelected.some(item => item.id === wallet.id);
    
    if (isAlreadySelected) {
      // 已选中则移除,过滤掉当前钱包
      return prevSelected.filter(item => item.id !== wallet.id);
    } else {
      // 未选中则添加,拼接新钱包到数组末尾
      return [...prevSelected, wallet];
    }
  });
}, []);

关键说明:

  • 函数式更新:使用prevSelected => newState的形式,确保每次操作都基于最新的状态值,避免闭包导致的旧状态问题。
  • 唯一标识判断:直接比较对象引用可能不准确(即使内容相同,不同实例的引用也不同),所以必须用钱包的唯一属性(如id、address等)来判断是否已选中,根据你的SyncedWalletData结构替换成对应的字段即可。
  • useCallback依赖:因为我们用了函数式更新,没有直接依赖selectedWallet,所以useCallback的依赖数组可以保持为空,避免不必要的重渲染。

内容的提问来源于stack exchange,提问作者Andrey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:00:08