React-spring useSpring() 防止在 window 调整大小时更新视口大小

React-spring useSpring() prevents viewport size from updating when window is resized

我使用 react-spring 的 useSpring() 制作了一个带有搜索栏的简单动画。聚焦时,我希望搜索栏更改 width,将其 margin 更改为 0,并将其 top 值更改为 0.

我遇到的第一个问题是保证金没有变化。我不知道这是否是 auto 关键字的问题,但搜索栏在动画之前居中,并且没有改变。

第二个问题是,当我调整 window 大小时,搜索栏的 top 值和 width 值(以 vwvw 为单位vh) 在刷新页面或搜索栏重新获得焦点之前不要更新。

我已经链接了我的代码 here

我需要在 window resize 上制作应用程序 auto-refresh 才能解决这个问题吗?

对于第一部分,尝试使用 margin: auto 以外的其他居中方法。例如,通过 left: 50%; transform: translateX(-50%) 的组合,您还可以将您的组件居中。并且 react-spring 可以用这个值进行插值。

第二部分。尝试使用视口单位而不是像素。像 vwvh.

像这样:

  const props = useSpring({
    top: focused ? `0px` : `${0.29 * window.innerHeight - 35}px`,
    width: focused
      ? `80vw`
      : `50vw`,
    margin: '10px',
    left: focused ? '40%' : '50%',
    transform: 'translateX(-50%)',
    config: { velocity: 4, mass: 1.8 }
  });

完整示例:https://codesandbox.io/s/react-spring-browser-resizing-mm7d1