首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react-spring,单独为列表项设置动画

react-spring,单独为列表项设置动画
EN

Stack Overflow用户
提问于 2021-03-15 17:28:56
回答 2查看 411关注 0票数 0

我有一个呈现动态列表的组件。我不想单独延迟每一项,这样每一项都会相对于前一项延迟呈现。我如何在react-spring中实现这一点?

以下是到目前为止的代码:

代码语言:javascript
复制
  const transitions = useTransition(banks, bank => bank.bic, {
    opacity: 0,
    to: { opacity: 1 }
  })

  return (
    <div>
      {transitions.map(({ item, props, key }) =>
        <animated.div key={key} style={props}>
          <Bank bank={item} />
        </animated.div>
      )}
    </div>
  )
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-21 23:39:06

显然我应该把文档读得更好些。有一个名为trail的属性。要让每个项目相对于前一个项目有50 ms的延迟,请执行以下操作:

代码语言:javascript
复制
const transitions = useTransition(banks, bank => bank.bic, {
    opacity: 0,
    to: { opacity: 1 },
    trail: 50
  })

  return (
    <div>
      {transitions.map(({ item, props, key }) =>
        <animated.div key={key} style={props}>
          <Bank bank={item} />
        </animated.div>
      )}
    </div>
  )
票数 1
EN

Stack Overflow用户

发布于 2021-03-20 21:06:31

您可以将函数添加到生命周期对象中:

代码语言:javascript
复制
const transitions = useTransition(banks, (bank) => bank.bic, {
    from: { opacity: 0 },
    enter: { opacity: 1 },
    leave: { opacity: 0 },
    config: (item) => ({
      duration: 1000 * item.bic
    })
  });

假设我们可以使用bic作为增量值,那么每个div的持续时间将是渐进式的。如果bic不是用于递增其他解决方案的值,则可以初始化counter变量。

代码语言:javascript
复制
  let counter = 0;

  const transitions = useTransition(banks, (bank) => bank.bic, {
    from: { opacity: 0 },
    enter: { opacity: 1 },
    leave: { opacity: 0 },
    config: () => {
      counter++;
      return {
        duration: 1000 * counter
      };
    }
  });

下面是一个示例:https://codesandbox.io/s/animate-list-items-individually-5uri8?file=/src/App.js:571-612

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

https://stackoverflow.com/questions/66635382

复制
相关文章

相似问题

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