【问题标题】:Set initial const based on viewport width react js根据视口宽度设置初始常量反应js
【发布时间】:2019-02-01 18:58:03
【问题描述】:

我正在用 react js 构建一个照片库,并且各种值(缩略图大小、图像大小)必须根据视口的宽度而改变。需要更改的值是应用程序中各种计算的基础,因此不能简单地放在样式表中。不希望陷入事物的内部工作中,我在我的渲染方法中设置了初始值,如下所示:

    // vars
    const thumbWidth = 75;
    const viewWindowWidth = thumbWidth * 5;
    const thumbContainerwidth = thumbWidth * 5;
    const thumbContainerHeight = 75;        

    let thumbContainerWidth = this.state.photos.length * thumbWidth; 
    let thumbContainerPos = this.state.thumbContainerPos;

    let dynamicStyles = {
        thumbContainerOuter : {
            width: thumbContainerwidth
        },
        thumbContainerInner : {
            left: thumbContainerPos
        } 
    }

如果 vp 尺寸更大,我想要做的是使 thumbWidth 值更大,并且它以 75 为基础,例如 480 像素(或其他任意值)。

到目前为止我尝试过的方法可能反映了我对 react js 的相对较新,我在组件的开头包含以下内容:

if(window.innerWidth >= 480 ) {
   const thumbWidth = 75;
} else {
   const thumbWidth = 100;
}

不幸的是,这样做意味着 react 将 'thumbWidth' 标记为未定义,无论它随后在哪里使用。

如果我将它包含在 componentDidMount 或渲染方法本身中,也会发生同样的情况。

我查看了诸如 contra/react-responsive 之类的节点包,但这些似乎是关于将 jsx 包含在媒体查询中,这并不能解决问题。 我只是在做一些非常愚蠢的事情还是很难解决?

【问题讨论】:

  • const 具有块作用域,这意味着它仅在 if {} 块中可用。如果你想在块外使用它,你需要在前面使用 let 定义它。
  • 正如 Gerard 提到的,let 和 const 都具有块作用域,如果它们在 if 块内定义,例如,那么它们在 if 或 else 之外不可用

标签: javascript css reactjs responsive-design media-queries


【解决方案1】:

const 是块作用域,因此在 if 内声明它不会使其在 if 块之外可用。您可以在更高的范围内声明 let thumbWidth 或只使用 ternary expression

const thumbWidth = window.innerWidth >= 480 ? 75 : 100

【讨论】:

  • 谢谢 :-) 另外,如果我希望在窗口调整大小时将其更改为相关值,该方法是什么?还是我应该将其作为单独的问题包含在内?
  • 虽然它与您的原始问题密切相关,但问题完全不同,所以我建议您提出另一个问题是的;)
猜你喜欢
  • 1970-01-01
  • 2022-07-01
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多