【问题标题】:ReactJS key prop not working in CSS animationReactJS 关键道具在 CSS 动画中不起作用
【发布时间】:2017-04-19 06:30:19
【问题描述】:

我有一个简单的对象,其中包含一些使用 JS map() 函数循环和输出的细节。

在此处查看 Codepen:http://codepen.io/matt5409/pen/YpeBWd?editors=0111

需要注意的一点是:

return(
    <ReactCSSTransitionGroup
      transitionName="example"
      transitionAppear={true} transitionAppearTimeout={1000}
      transitionEnter={false} transitionLeave={false}>

    <li key={person.toString()}>{person.name}, {person.age}</li>

    </ReactCSSTransitionGroup>
)

控制台正在记录有关 key props 的错误,根据官方文档 (https://facebook.github.io/react/docs/lists-and-keys.html#keys),我正在正确实施。

有趣的是,如果我删除 ReactCSSTransitionGroup 组件,只会出现列表中的第一项。如果我删除 key={},所有三个都会出现(完成控制台错误)。

这是怎么回事?

目标是让函数循环遍历列表中的每个项目,并按照 ReactCSSTransitionGroup 的定义对其进行动画处理。

【问题讨论】:

    标签: css animation reactjs


    【解决方案1】:

    您需要为 ReactCSSTransitionGroup 组件而不是子 li 标签提供 key props。还在地图函数中使用索引参数来填充键。

    这样的事情会起作用

    peopleList.map(function(person, index){
        return(
            <ReactCSSTransitionGroup
              key={index}
              transitionName="example"
              transitionAppear={true} transitionAppearTimeout={1000}
              transitionEnter={true}
              transitionEnterTimeout={1000}
              transitionLeave={true}
              transitionLeaveTimeout={1000}
             >
    
            <li key={index}>{person.name}, {person.age}</li>
        )
    }
    

    【讨论】:

    • 感谢 Khang - 实际上我已经尝试将密钥应用到 ReactCSSTransitionGroup 但它不起作用。我已更新 Codepen 以反映更改,请随时 fork。
    • 我可以在您更新的 Codepen 链接中看到它正在工作。三里慢慢消失。这不就是你想要达到的吗?
    • 如果你想让它一个一个地淡入,你需要一种不同的方法。单独的 CSS 不会削减它,因为没有办法知道前一个的过渡是否完成。
    • 是的。我现在正在研究 React Motion (github.com/chenglou/react-motion)。我无法通过过渡组实现这一目标,这非常令人失望。谢谢。
    • 您可以尝试给每个组件状态,并根据索引号为每个组件(在componentWillMount中)使用setTimeout。
    猜你喜欢
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2013-11-20
    • 2016-03-26
    • 1970-01-01
    • 2021-04-18
    相关资源
    最近更新 更多