我最近正在使用react-spring
,它运行良好,但是当我必须在孩子身上应用onClick
时,我遇到了一些问题。
这是我的主要结构:
<anim.button className="c"
style={{ opacity: opacity.interpolate(o => 1 - o), transform }}>
<Bar />
</anim.button>
<anim.button className="c"
style={{ opacity, transform: transform.interpolate(t => `${t}
rotateX(180deg)`) }}>
<Bar />
</anim.button>
当然,anim.button
上的onClick
可以正常工作,但这不是我要尝试的。
这是我<Bar />
组件:
const Bar = () => (
<div className="bar">
<Checkbox
onClick={() => {
set(state => !state)
}}
/>
</div>
)
我也尝试使用<anim.div>
而不是<anim.button>
但这给了我相同的结果。
现在这里的问题是,似乎react-spring
在我的<Bar />
组件上放了一个层。有没有办法在我的组件中使用onClick
而不是用于anim.button
的?
鉴于复选框也是一个组件,它可能没有 onClick 处理,请尝试放置on单击包装div 或检查复选框组件。
从来没有使用过 react-spring,但像这样构建你的Bar
组件可能会奏效。
const Bar = (props) => (
<div onClick={() => {set(state => !state)}}>
<anim.button {...props}>
<div className="bar">
<Checkbox />
</div>
</anim.button>
</div>)
然后像这样渲染它:
<Bar className={'c'} style={{ opacity: opacity.interpolate(o => 1 - o), transform}}/>
<Bar className="c" style={{ opacity, transform: transform.interpolate(t => `${t}
rotateX(180deg)`) }}/>
你可以宁愿将栏包装在一个div中:<animated.div>
你在一个不太好的复选框周围包裹一个按钮。onClick
将按预期触发。
<animated.div className="c"
style={{ opacity, transform: transform.interpolate(t => `${t}
rotateX(180deg)`) }}>
<Bar />
</animated.div>
问题已发现,实际上与react-spring
没有任何关系。 位置绝对样式是导致这种情况的原因。