【问题标题】:Why does react-spring not repeatedly work?为什么 react-spring 不能重复工作?
【发布时间】:2021-03-03 03:00:58
【问题描述】:

我正在尝试react-springuseInterval

https://codesandbox.io/s/mutable-water-icy6m

export default App = () => {
  let [count, setCount] = useState(0);

  useInterval(() => {
    setCount(count + 1);
  }, 1000);

  const style = useSpring({
    opacity: 1 - Math.random() / 10,
    from: { opacity: 0 + Math.random() / 10 }
  });

  return <animated.h1 style={style}>{count}</animated.h1>;
};

一开始我是用的

  const style = useSpring({
    opacity: 1,
    from: { opacity: 0 }
  });

但我想如果虚拟 DOM 与以前的值没有任何差异,那么它就不会重新渲染,所以我添加了 Math.random() / 10 来稍微改变它,以便它可以工作,但是它除了第一个之外,不会每隔一秒就消失一次。如何让它发挥作用?

【问题讨论】:

    标签: javascript reactjs react-spring


    【解决方案1】:

    如果您希望动画重新开始,您需要设置reset 标志:

    const style = useSpring({
    opacity: 1,
    from: { opacity: 0},
    reset:true});
    

    【讨论】:

    • 很好的解决方案。但是你知道为什么没有它,它就行不通吗?假设第一次可以工作,第二次应该可以工作,特别是如果第一次是从不透明度 0.053 到 0.923,第二次是从 0.021 到 0.9832……但这就是我对自己和同事的感觉:我们成为了像 Ruby on Rails 一样的务实程序员:我们知道如果我们输入这个,那么某些东西会起作用,但没有人知道为什么
    • 它不起作用,因为默认情况下它们不会重新设置from 值,因此您从 0.923 变为 0.9832,这并不是特别明显
    • 事实上,如果你在没有/10 的情况下执行` 1- Math.random() `,你会注意到它一直在动画(而且看起来非常迷人!)
    • 你觉得它像暮光区吗?嗯......我可以接受它不会重置的事实......但它有点像,我们有一个循环重复a = b + 1b是10和a是11,现在@ 987654328@ 是 20,哦不,a 仍然是 11 因为我们没有告诉它“重置”。我们必须将其重置为21
    猜你喜欢
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多