1

我的项目有问题。我创建了一个 card-img-overlay 来在图像上显示图标。如果您单击整个图像,您将被重定向到一个帖子。我想让喜欢和分享的图标可以点击。

我的项目在 Reactjs 中。我正在显示来自 Reddit API 的图像和视频。

谢谢您的帮助。

  id,
  slugTitle,
  title,
  url_overridden_by_dest,
  author,
  preview,
}) => {
  const [isVideo, setIsVideo] = useState(false);
  useEffect(() => {
    if (preview) setIsVideo(preview.split('.').pop() === 'mp4');
  }, [preview]);
  const history = useHistory();

  const goToPage = () => {
    history.push(`/Post/${id}/${slugTitle}`);
  };

  return (
    <Card
      inverse
      onClick={goToPage}
      style={{
        cursor: 'pointer',
      }}
    >
      {isVideo && (
        <video autoPlay="false" loop width="100%" src={preview}>
          <track default kind="captions" />
        </video>
      )}
      {!isVideo && (
        <CardImg top width="100%" src={url_overridden_by_dest} alt={title} />
      )}
      <CardImgOverlay className="hideinfos">
        <CardText className="w-100 d-flex justify-content-between">
          <div>
            <VscAccount className="mr-2" size={20} />
            {author}
          </div>
          <div>
            <LikeButtonhp
              className="mr-2 card-link"
              size={20}
              style={{
                position: 'relative',
              }}
            />
            <BiShareAlt size={20} />
          </div>
        </CardText>
      </CardImgOverlay>
    </Card>
  );
};
4

2 回答 2

1

您需要在您的和组件上放置onClick处理程序,并使用它来阻止事件冒泡到:LikeButtonhpBiShareAltevent.stopPropagation()<Card />

<BiShareAlt
    size={20}
    onClick={event => {
        event.stopPropagation();
        // Do stuff for share click
    }}
/>

您可能还需要更改BiShareAltLikeButtonhp组件以支持onClick道具,例如,如果它们渲染一个<button>元素,它可能看起来像这样:

const BiShareAlt = ({ onClick }) => (
    <button onClick={onClick}>
        Share
    </button>
);

export default BiShareAlt;
于 2020-11-25T15:35:54.280 回答
1

在我的 onClick 中,我添加了一个 e.stopPropagation(); 它解决了我的问题。现在我可以点击心形图标,它就可以工作了。它停止在我的图像(父)上设置 onClick。

function LikeButtonhp() {
  const [liked, setLiked] = useState(false);
  return (
    <Button
      outline
      color="link"
      className="likebutton"
      onClick={(e) => {
        e.stopPropagation();
        setLiked(!liked);
      }}
      style={{ color: 'white' }}
    >
      {liked ? <BsHeartFill size={20} /> : <BsHeart size={20} />}
    </Button>
  );
}
于 2020-11-26T17:36:52.553 回答