【问题标题】:Can't get React Springs's useSprings to work无法让 React Springs 的 useSprings 工作
【发布时间】:2019-06-26 12:35:41
【问题描述】:

我正在尝试使用 React Spring 为列表中项目的位置变化设置动画。

使用useSpring 淡入项目很简单:

function App() {
  const [items, setItems] = React.useState([0, 1]);

  const handleClick = () => {
    if (items[0] === 0) {
      setItems([1, 0]);
    } else {
      setItems([0, 1]);
    }
  };

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

  return (
    <>
      <animated.div style={props}>
        <button type="button" onClick={handleClick}>
          click
        </button>
      </animated.div>
      <ul className="App">
        {items.map(item => {
          return <li key={item}>{item}</li>;
        })}
      </ul>
    </>
  );
}

但是,当我尝试使用 useSprings 时出现错误:

function App() {
  const [items, setItems] = React.useState([0, 1]);

  const handleClick = () => {
    if (items[0] === 0) {
      setItems([1, 0]);
    } else {
      setItems([0, 1]);
    }
  };

  const springs = useSprings(items.length, items.map(item => ({ opacity: item.opacity }))

  return (
    <>
      <button type="button" onClick={handleClick}>
        click
      </button>
      <ul className="App">
        {items.map(item => {
          return <li key={item}>{item}</li>;
        })}
      </ul>
    </>
  );
}

https://codesandbox.io/s/wonderful-oskar-v04vw

/src/index.js:意外的令牌,预期的“,”

文档没有详细说明:https://www.react-spring.io/docs/hooks/use-springs

【问题讨论】:

    标签: react-spring


    【解决方案1】:

    这只是一个错字。还需要一个右括号。

    编辑:我也修复了其余的代码,但我不知道你想要实现什么。您可以在数组中为每个元素定义不同的样式属性并进行更改。

    function App() {
      const [items, setItems] = React.useState([0, 0.5, 1]);
    
      const handleClick = () => {
        if (items[0] === 0) {
          setItems([1, 0.5, 0]);
        } else {
           setItems([0, 0.5, 1]);
        }
      };
    
      const springs = useSprings(
        items.length,
        items.map(item => ({ opacity: item }))
      );
    
      return (
        <>
          <button type="button" onClick={handleClick}>
            click
          </button>
          <ul className="App">
            {springs.map((props, i) => {
              return (
                <animated.li style={props} key={i}>
                  {i}
                </animated.li>
              );
            })}
          </ul>
        </>
      );
    }
    

    更新的沙盒:https://codesandbox.io/s/lucid-brown-ep7i7

    【讨论】:

    • 这修复了该错误(代码沙箱更新),但我仍然不清楚如何实际使用它。我可能会回到渲染道具模式,文档更清晰。
    • 我也觉得这里的文档不太好。我不得不猜测一些语法。
    • 我正在尝试在列表中的项目更改顺序时制作动画,但我不确定 React Spring 是否真的可以做到这一点。
    • 我确信您可以使用 useTranslation 来做到这一点。也许这个 useSprings 也是如此,但这是我第一次使用它。我明天看看。这里已经过了午夜。我出去了。
    猜你喜欢
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 2019-07-17
    • 1970-01-01
    • 2021-05-25
    • 2017-02-18
    • 1970-01-01
    相关资源
    最近更新 更多