react UI组件库antd-mobile中的carousel组件的一些问题

发布于 2022-09-04 15:40:41 字数 1598 浏览 14 评论 0

代码如下所示:

class Home extends Component {
    render() {
        const {
            carousels: {
                value = []
            } = {}
        } = this.props;
        
        return (
            <div>
                <Carousel className="my-carousel" autoplay={false} infinite>
                    {
                        value.map((item,index) => (
                            <img key={index} src={item}></img>
                        ))
                    }
                </Carousel>
            </div>
        );
    }
}

carousels是在Home组件的父组件中通过异步请求获得,然后通过props传到Home组件中的。carousels中的value是一个数组,包含了图片的url。

现在的话图片加载出来就是Carousel组件的默认高度,只有100px。然后如果自动轮播或者滑动的话图片的高度才会出来。

我想了一下原因大概是一开始value是空的,然后没有图片,组件就把组件高度设为了默认高度100px,就定死了。当图片的数据传下来以后,因为一开始组件已经把组件高度定死了,就不再自适应图片高度,造成组件高度是默认高度。(这里我也不知道为什么会这样,有人解答一下?)然后当滑动图片的时候,应该是触发了什么条件,让图片自适应了。(这里其实我也不知道为什么,高手解答一下?)

具体大概是这样:

我期待的:

77e8fa38-c91a-11e6-9ec1-7162636d4357.png

然后实际上是这样的:
80dd2312-c91a-11e6-865b-5cb619d6a083.png

只有滑动之后或则自动轮播之后才会正常。

就是如果map前面的value如果是直接写死在里面,像官网的domo那样,就是没问题的,就是如果是从服务器拿图片数据回来再渲染,一开始图片是空的,才造成会这样好像

有没有人遇到跟我一样的问题...

求高手解答,弄了一下午了,好郁闷

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

陌伤ぢ 2022-09-11 15:40:41

给一个初始化的数据就行了

constructor(props) {

    super(props);
    this.state = {
        imgHeight: 176,
        data: [1,2,3]
      }
}

componentDidMount() {

    // simulate img loading
    // console.log(this.props)
    this.props.getBannerData()

    setTimeout(() => {
        // console.log(this.props.data)
        this.setState({
            ...this.state,
            data: this.props.data.bannerData
        });
    }, 100);
}

传参
this.state.data.map((val, index) => ()

独行侠 2022-09-11 15:40:41

你把你定死的高度改为最小高度试试看

夕嗳→ 2022-09-11 15:40:41
 this.state = {
      imgHeight: '',
 };
templateList.map((item, index) => {
                return (
                  <div className="template-banner" key={item.key}>
                    <div className="img-preview"
                         style={{height: this.state.imgHeight }}
                      >
                      <img
                        onLoad={() => {
                          // fire window resize event to change height
                          window.dispatchEvent(new Event('resize'));
                          this.setState({ imgHeight: 'auto' });
                        }}
                        src={item.img} alt={item.title}/>
                      <span className="preview">
                        <span className="text">预览</span>
                      </span>
                    </div>
                    <span className="name">{item.title}</span>
                  </div>
                )
              })
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文