首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据屏幕宽度动态设置道具?

问如何根据屏幕宽度动态设置道具?
EN

Stack Overflow用户
提问于 2019-08-20 22:50:25
回答 1查看 290关注 0票数 1

我有下面的代码,其中我有一个组件,它是幻灯片的旋转木马(来自nuka- carousel库)。我希望当屏幕宽度低于某个级别(729px)时,属性slideWidth={0.5}为slideWidth={1},这样当屏幕变小时,您只能看到一张幻灯片,而不是一次看到多张幻灯片。

我尝试过使用媒体查询,但我找不到一种方法来根据样式设置属性。

代码语言:javascript
复制
import React from 'react'
import Carousel from 'nuka-carousel'

class Quotes extends React.Component {

  state = {
    slideIndex: 0,
  };

  render() {

    return (
      <Carousel slideWidth={0.5}>
         {this.props.slides.map(slide => (
             <Slide>
                .... Content ....
             </Slide>
         ))}
      </Carousel>
    )
  }
};

以前有没有人遇到过这个问题,或者能想出解决方案?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-08-21 00:03:57

您可以使用类似于JS的媒体查询的matchMedia API -您可以使用断点设置一个,并更改JS变量,这将允许您,比如说,有条件地呈现您想要的旋转木马:

代码语言:javascript
复制
var mediaQueryList = window.matchMedia('(min-width: 729px)');

    return (
      { mediaQueryList.matches && //matches
        <Carousel slideWidth={0.5}>
         {this.props.slides.map(slide => (
             <Slide>
                .... Content ....
             </Slide>
         ))}
        </Carousel>
      }
      { !mediaQueryList.matches && //doesn't match
        <Carousel slideWidth={1}>
         {this.props.slides.map(slide => (
             <Slide>
                .... Content ....
             </Slide>
         ))}
        </Carousel>
      }
    )

所以这里的想法是,当MQ匹配时,我们呈现0.5转盘,当它不匹配时,我们呈现1转盘。如果需要,您还可以设置回调并控制变量的值:

代码语言:javascript
复制
function handleWidthChange(evt) {
  if (evt.matches) {
    /* The viewport is currently wide */
    myVariable = 0.5;
  } else {
    /* The viewport is currently narrow */
    myVariable = 1;
  }
}
mediaQueryList.addListener(handleWidthChange); // Add the callback function as a listener to the query list.

handleWidthChange(mediaQueryList);//call it

    return (
        <Carousel slideWidth={ myVariable }>
         {this.props.slides.map(slide => (
             <Slide>
                .... Content ....
             </Slide>
         ))}
        </Carousel>

    )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57576293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档