reactjs - React-card-flip 一键翻转所有卡片
问题描述
我正在使用 react-card-flip - https://github.com/AaronCCWong/react-card-flip在点击时翻转照片。但是当我有多个时,如果我只点击一个,它就会全部翻转。看起来它会自动更新所有这些状态,即使只需单击一下。有没有办法纠正这个问题?
import React, { Component } from "react"
import string from "prop-types"
import styles from "./styles.module.less"
import ReactCardFlip from "react-card-flip"
class VerticalFlip extends Component {
constructor() {
super()
this.state = {
isFlipped: false,
}
this.handleClick = this.handleClick.bind(this)
}
handleClick(event) {
event.preventDefault()
this.setState(prevState => ({ isFlipped: !prevState.isFlipped }))
}
render() {
return (
<div className={styles.cards}>
{team.map((s, i) => {
return (
<div key={i}>
<ReactCardFlip
isFlipped={this.state.isFlipped}
flipSpeedFrontToBack={1.0}
flipSpeedBackToFront={1.0}
flipDirection="vertical"
>
<div key="front" style={this.props.card} onClick={this.handleClick}>
<div className={styles.ImageContainer}>
<img style={this.props.image} src={s.src} alt={s.alt} />
</div>
</div>
<div key="back" style={this.props.card} onClick={this.handleClick}>
<div className={styles.TextContainer}>
<p>
<div className={styles.name}>{s.firstname}{s.lastname}</div>
<div className={styles.position}>{s.position}</div>
</p>
</div>
</div>
</ReactCardFlip>
</div>
);
})}
</div>
)
}
}
VerticalFlip.propTypes = {
firstName: string.isRequired,
lastName: string.isRequired,
role: string,
}
export default VerticalFlip
解决方案
使用该组件渲染每个翻转
const FlipComponent = ({s, card, image}) => {
const [isFlipped, changeFlip] = useState(false);
const handleClick = useCallback((event) => {
event.preventDefault()
changeFlip(!isFlipped)
})
return (
<ReactCardFlip
isFlipped={isFlipped}
flipSpeedFrontToBack={1.0}
flipSpeedBackToFront={1.0}
flipDirection="vertical"
>
<div key="front" style={card} onClick={handleClick}>
<div className={styles.ImageContainer}>
<img style={image} src={s.src} alt={s.alt} />
</div>
</div>
<div key="back" style={card} onClick={handleClick}>
<div className={styles.TextContainer}>
<p>
<div className={styles.name}>
{s.firstname}
{s.lastname}
</div>
<div className={styles.position}>{s.position}</div>
</p>
</div>
</div>
</ReactCardFlip>
);
};
这使得每次翻转的每个状态都是独一无二的。
你需要删除
<div key={i}>
<ReactCardFlip
isFlipped={this.state.isFlipped}
flipSpeedFrontToBack={1.0}
flipSpeedBackToFront={1.0}
flipDirection="vertical"
>
<div key="front" style={this.props.card} onClick={this.handleClick}>
<div className={styles.ImageContainer}>
<img style={this.props.image} src={s.src} alt={s.alt} />
</div>
</div>
<div key="back" style={this.props.card} onClick={this.handleClick}>
<div className={styles.TextContainer}>
<p>
<div className={styles.name}>{s.firstname}{s.lastname}</div>
<div className={styles.position}>{s.position}</div>
</p>
</div>
</div>
</ReactCardFlip>
</div>
上
<FlipComponent key={i} s={s} card={this.props.card} image={this.props.image} />
推荐阅读
- vba - adodb sql 连接在某些机器上出现运行时错误
- java - 撤销操作是否等待消费过程在 Kafka 重新平衡中完成?
- php - Angular http POST 无法发送帖子参数
- java - Spring混淆字符串后:与JDBC数据源URL中的端口
- unity3d - 当用户在虚拟现实中使用 Leap Motion 用手旋转对象时,如何触发事件?
- c# - 通过标签找到某个按钮的最佳方法是什么?
- php - composer global 需要 laravel/installer
- javascript - 通过参考(Reactjs)访问事件设置中的状态?
- fullcalendar - 事件的完整日历周视图宽度不正确
- javascript - 恢复中止的 AJAX 请求