首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >响应防止css动画重新启动每个状态更改

响应防止css动画重新启动每个状态更改
EN

Stack Overflow用户
提问于 2022-09-09 17:51:37
回答 1查看 151关注 0票数 0

我有两个子组件,一个图片库和一个隐藏组件,它将显示完整大小的库的点击图像。

代码语言:javascript
复制
    const [selectedIndex, setSelectedtIndex] = useState(0);
    const [galleryVisible, setGalleryVisible] = useState(false);

    const FirstComponent = () => {
        return (
           <div className={'gallery-container'}>
               <div class='img fade-1' onClick={() => handleClick(1)}>Image 1</div>
               <div class='img fade-2' onClick={() => handleClick(2)}>Image 2</div>
               <div class='img fade-3' onClick={() => handleClick(3)}>Image 3</div>
               [...]
           </div>
        )
    }

    const handleClick = (index) => {
        setSelectedtIndex(index)
        setGalleryVisible(true)
    }

    const SecondComponent = ({ index }) => {
        return (
            <div className={`selected-img`}>Selected : {index} (But the fading animation shouldn't restart è_é)</div>
        )
    }

    return (
        <>
            <FirstComponent/>
            {galleryVisible && 
                <SecondComponent index={selectedIndex} />
            }
        </>
    )

问题是,我在第一个组件上也有一个淡入动画,每次我点击一个图像来显示第二个组件时,动画就会因为对状态变化的重新反应而重置。

代码语言:javascript
复制
    &.fade-1 {
      animation-delay: 0s
    }
    &.fade-2 {
      animation-delay: 0.5s
    }
     &.fade-3 {
      animation-delay: 1s
    }

我不知道我怎么能只改变第二个组件,当状态从点击第一个.我试着和useMemo玩,但没能让它起作用。

下面是一个代码复制问题:https://codepen.io/disgallion/pen/zYjqPBE

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-09 18:02:49

将第一个组件移出App并将handleClick传递给它的支持:

代码语言:javascript
复制
  const FirstComponent = ({handleClick}) => {
    return (
      <div className={'gallery-container'}>
        <div class='img fade-1' onClick={() => handleClick(1)}>1</div>
        <div class='img fade-2' onClick={() => handleClick(2)}>2</div>
        <div class='img fade-3' onClick={() => handleClick(3)}>3</div>
      </div>
    )
  }

const App = () => {
  const [selectedIndex, setSelectedtIndex] = useState(0);
  const [galleryVisible, setGalleryVisible] = useState(false);

  const handleClick = (index) => {
    console.log('click')
    setSelectedtIndex(index)
    setGalleryVisible(true)
  }


  
  const SecondComponent = ({ index }) => {
    return (
      <div className={`selected-img`}>Selected : {index} (But the fading animation shouldn't restart è_é)</div>
    )
  }
  
  return (
    <>
      Click on an image to open the fullsize gallery:
      <FirstComponent handleClick={handleClick} />
      {galleryVisible && 
        <SecondComponent index={selectedIndex} />
      }
    </>
  )
}

ReactDOM.render(<App />,
document.getElementById("root"))

现在,App的状态更改将不会在FirstComponent中触发重呈现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73665867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档