我用的是Reaction Spring的useSprings号钩子.我的这个钩子的实现接受一个变量数字作为计数,然后有一个相关的配置.

我的挂钩实现如下所示:

    const [activeTokens, setActiveTokens] = useState([]);
    const [tokenSprings, setTokenSprings] = useSprings(activeTokens.length, (index) => {
            return {
                from: { transform: `translate3d(0px, 0px, 0)`},
                to: async (next) => {
                    var rotate = randomInt(800, 7200);
                    await next({
                        transform: `translate3d(1px, 1px, 0)`,
                        config: { mass: 0.4, tension: 5, friction: 3 },
                    })

                },
            }
        }
    });

我可以添加令牌并按预期渲染弹簧.我遇到的问题是什么时候我想从DOM中删除特定的令牌.JSX看起来如下所示:

                    
tokenSprings.map((spring, index) => (
    <animated.div className="text-white text-2xl absolute cursor-pointer" key={index} style={spring}>
        <div onClick={() => handleTokenClick(index)}>
            <FontAwesomeIcon icon={faMoneyBill}></FontAwesomeIcon>
        </div>
    </animated.div >

我的handleTokenClick函数如下所示:

function handleTokenClick(tokenId) {
    setActiveTokens(activeTokens => activeTokens.filter(token => token.id !== tokenId));
}

这显然行不通,因为我没有任何可从tokenSprings数组访问的token.id.我搜索了Reaction Spring文档,但我找不到一种方法来包括我在tokenSprings数组中 for each 元素指定的id,稍后我可以在JSX中引用它.

这个是可能的吗?如果不是,如何引用我想要从DOM中删除的实际tokenSpring元素才是最好的呢?

推荐答案

我最终通过将clicked属性添加到activeTokens,然后有条件地添加display:none样式IF clicked === true来解决这个问题

const handleTokenClick = (tokenIndex) {
    activeTokens[tokenIndex].clicked = true;
    setActiveTokens(activeTokens)
}
<animated.div className={`text-white text-2xl absolute cursor-pointer ${token.clicked === true ? "hidden" : ""}`} key={token.id} style={tokenSprings[index]}>
    <div onClick={() => handleTokenClick(index)}>
        <FontAwesomeIcon icon={faMoneyBill}></FontAwesomeIcon>
    </div>
</animated.div >

Reactjs相关问答推荐

如何实现黑暗模式 map ?

Next.js-图像组件加载问题

如何在Reac.js中通过子组件和props 调用父组件函数?

将动态元素中的输入数据传输到Reaction

无法使用Reaction日期选取器和Next.js设置初始日期

在继承值更改时重置react 挂钩窗体字段值

如何在物料界面react 的多选菜单中设置最大 Select 数限制

使用Ionic 7和React 18,如何访问历史对象以在页面之间导航?

状态更改是否卸载功能组件

useEffect firebase 清理功能如何工作?

状态改变不会触发重新渲染

当 URL 与我声明的任何路由都不匹配时,如何使用不会重定向到错误页面的动态 URL? - react 路由 dom

强制 useEffect 仅运行一次

显示我是否加入聊天应用程序时出现问题

使用 react-markdown 组件时 Tailwind CSS 的问题

RTK 查询Mutations 在 StrictMode 中执行两次

如何将我的 ID 值传递给下一个组件?

如何在 JSX 中使用 -webkit- 前缀?

npm init vite@latest 和 npm init vite 有什么区别?

点击提交后自动添加#