【问题标题】:Change props value in function of window size根据窗口大小更改道具值
【发布时间】:2019-12-07 04:28:26
【问题描述】:

我使用 React-Spring,我想在窗口大小变化时更改某些组件的偏移量。 这是我尝试过的,但不起作用,我总是必须刷新浏览器。

 <ParallaxLayer
          className="elements"
          offset={window.innerWidth < 576 ? 2.9 : 1.5}
          speed={1}
        >
          <h2 className="title-section Apropos"> A propos</h2>
          <div className="main-Apropos">
            <p className="para p1">
              dolores et quas molestias excepturi sint occaecati cupiditate
            </p>
            <p className="para p2">
              animi, id est laborum et dolorum fuga. Et harum quidem rerum
            </p>
          </div>
        </ParallaxLayer>

我应该使用功能渲染吗?或其他解决方案

【问题讨论】:

    标签: javascript reactjs media-queries react-spring


    【解决方案1】:

    编辑:

    我认为问题是当窗口调整大小时,它不会更新值并且偏移量不会改变,你应该做的是有一个监听器来查看窗口何时调整大小并保存状态。

    这里是一个使用钩子的例子

    function useWindowSize() {
      const [size, setSize] = useState([0, 0]);
      useLayoutEffect(() => {
        function updateSize() {
          setSize([window.innerWidth, window.innerHeight]);
        }
        window.addEventListener('resize', updateSize);
        updateSize();
        return () => window.removeEventListener('resize', updateSize);
      }, []);
      return size;
    }
    

    然后就使用

    const [宽度,高度] = useWindowSize();

    return (
        <ParallaxLayer
            className="elements"
            offset={width < 576 ? 2.9 : 1.5}
            speed={1}
        >
        ...
        </ ParallaxLayer>
    )
    

    您可以采用不同的方法或完全按照您的意愿行事。

    简单的方法是拥有两个具有不同媒体查询值的类,然后简单地切换类。

    您可以使用styled-components 并传递一个带有媒体查询偏移量的道具。

    const MyComponent = styled.div`
      @media (your media query) {
        offset: ${props => props.offset};
      }
    `;
    

    但是...我认为您的问题中缺少某些内容,您不是在使用 react-spring 吗?也许您应该更清楚自己要做什么以及正在使用什么。

    【讨论】:

    • 非常感谢您的回答,是的,我正在使用 react-spring,当我切换到 576px(移动)以下的分辨率时,我想设置不同的偏移量,因为元素覆盖了移动屏幕分辨率.
    • 我认为 styled-components 是最好的解决方案,但我不知道如何将它们与 react spring 组件一起使用而不会发生冲突。
    • @tedajophilippe 到目前为止您尝试过什么?什么冲突?
    • 我的意思是“偏移”仅适用于&lt;parallaxLayer/&gt;,这是我尝试使用样式化组件的方法:` import {Parallax, ParallaxLayer} from 'react-spring/renderprops-addons' const ParallaxLayer = styled.div` @media (min-width: 576px) { offset: ${props => props.offset}; } const mobileSize = { offset: 1.5 } return ( ... ParallaxLayer> )` 我得到一个解析错误
    • 这是你提出的第一个选项我得到的:(0 , _react.useState) is not a function
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2017-08-31
    • 2015-03-22
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多