最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - react-multi-carousel is not rendering - Stack Overflow

programmeradmin8浏览0评论

I'm getting data from the state. Now I want to make a carousel slider using react-multi-carousel

I am trying to implement for a news card ponent that has data ing from the API. So far my code is as follows, but the carousel does not seem to be implementing?

Child Component

import Carousel from 'react-multi-carousel';
import 'react-multi-carousel/lib/styles.css'
    const responsive = {
        superLargeDesktop: {
          breakpoint: { max: 4000, min: 3000 },
          items: 5
        },
        desktop: {
          breakpoint: { max: 3000, min: 1024 },
          items: 3
        },
        tablet: {
          breakpoint: { max: 1024, min: 464 },
          items: 2
        },
        mobile: {
          breakpoint: { max: 464, min: 0 },
          items: 1
        }
    };
    const size = 15;
    const Itemlist = props.data.slice(0, size).map((item,id) => {
        return(
            <div className="item px-2 col-md-3" key={item.title}>
            <div className="alith_latest_trading_img_position_relative">
                <figure className="alith_post_thumb"> 
                <Link
                to={{
                    pathname : `/details/${id}`,
                }}
                >
                <img
                    alt=""
                    src={item.multimedia ? item.multimedia[0].url : image}
                    className="w-100 thumbnail"
                />
                </Link>
                </figure>
                <div className="alith_post_title_small">
                <Link
                to={{
                    pathname : `/details/${id}`,
                }}
                ><strong>{item.title.length > 30 ? item.title.substring(0,30) + ".." : item.title}</strong>
                </Link>
                <p className="meta">
                    <span>{`${moment(item.published_date).fromNow()}`}</span>
                </p>
                </div>
            </div>
        </div>
        )
    })
    return (
        <React.Fragment>
            <Carousel responsive={responsive}>
                  {Itemlist}
            </Carousel>
        </React.Fragment>
    );
};

Parent Component

    state = {
        items : []
    }
    fetchLatestNews = () => {
        api.getRealFeed()
        .then(response=>{
            this.setState({
                items : response.data.results
            });
        })
    }
    ponentDidMount = () => {
        this.fetchLatestNews();
    }
    render(){
        return(
        <React.Fragment>
            <Item data={this.state.items}/>
        </React.Fragment>
)}};

I'm getting data from the state. Now I want to make a carousel slider using react-multi-carousel

I am trying to implement https://www.npmjs./package/react-multi-carousel for a news card ponent that has data ing from the API. So far my code is as follows, but the carousel does not seem to be implementing?

Child Component

import Carousel from 'react-multi-carousel';
import 'react-multi-carousel/lib/styles.css'
    const responsive = {
        superLargeDesktop: {
          breakpoint: { max: 4000, min: 3000 },
          items: 5
        },
        desktop: {
          breakpoint: { max: 3000, min: 1024 },
          items: 3
        },
        tablet: {
          breakpoint: { max: 1024, min: 464 },
          items: 2
        },
        mobile: {
          breakpoint: { max: 464, min: 0 },
          items: 1
        }
    };
    const size = 15;
    const Itemlist = props.data.slice(0, size).map((item,id) => {
        return(
            <div className="item px-2 col-md-3" key={item.title}>
            <div className="alith_latest_trading_img_position_relative">
                <figure className="alith_post_thumb"> 
                <Link
                to={{
                    pathname : `/details/${id}`,
                }}
                >
                <img
                    alt=""
                    src={item.multimedia ? item.multimedia[0].url : image}
                    className="w-100 thumbnail"
                />
                </Link>
                </figure>
                <div className="alith_post_title_small">
                <Link
                to={{
                    pathname : `/details/${id}`,
                }}
                ><strong>{item.title.length > 30 ? item.title.substring(0,30) + ".." : item.title}</strong>
                </Link>
                <p className="meta">
                    <span>{`${moment(item.published_date).fromNow()}`}</span>
                </p>
                </div>
            </div>
        </div>
        )
    })
    return (
        <React.Fragment>
            <Carousel responsive={responsive}>
                  {Itemlist}
            </Carousel>
        </React.Fragment>
    );
};

Parent Component

    state = {
        items : []
    }
    fetchLatestNews = () => {
        api.getRealFeed()
        .then(response=>{
            this.setState({
                items : response.data.results
            });
        })
    }
    ponentDidMount = () => {
        this.fetchLatestNews();
    }
    render(){
        return(
        <React.Fragment>
            <Item data={this.state.items}/>
        </React.Fragment>
)}};
Share Improve this question edited Jan 19, 2023 at 6:35 DinoMyte 8,8681 gold badge20 silver badges27 bronze badges asked Feb 10, 2020 at 4:44 Rajib karmakerRajib karmaker 4861 gold badge5 silver badges17 bronze badges 5
  • Mind sharing all of the code for your news card ponent? – joshkmartinez Commented Feb 10, 2020 at 6:58
  • Added @joshkmartinez. Please have a look – Rajib karmaker Commented Feb 10, 2020 at 7:13
  • Have you confirmed that you have data in props.data ? – Krina Soni Commented Feb 10, 2020 at 7:40
  • yes. I'm getting data -- {item.title} – Rajib karmaker Commented Feb 10, 2020 at 7:43
  • Is there anyone for help – Rajib karmaker Commented Feb 10, 2020 at 9:52
Add a ment  | 

6 Answers 6

Reset to default 7

I had the same issue,

Take a look at the specific props. You can add a class to the container, slide or item for adding your css rules. In my case, I had to define a width to the containerClass.

<Carousel
   containerClass="carousel-container"
   itemClass="carousel-item"
>
 ... // Your carousel here

And in your css file:

.carousel-container {
  width: 100%;
  ...
 }

I'm not sure if this will help, but I had an issue where the carousel bees empty when I set the prop infinity to true. Turns out it was because the website I'm working on uses bootstrap rtl.

To fix the issue I just changed the direction of the carousel container to be ltr. Something like this:

[dir="rtl"] .carousel-container{
  direction: ltr;
}

i fix it by adding width properties to the container class

if you using tailwind u need to can set the containerClass width

<Carousel
containerClass={`w-full`}
>
   {item}
</Carousel>

I believe you should add import 'react-multi-carousel/lib/styles.css' to your top-level file NOT in the child ponent file. E.g: _app.tsx for NextJS. It took me about 30m to find out that.

This worked fine for me in functional ponent: I'm late but it can be usefull to anyone in future. https://www.npmjs./package/react-multi-carousel

import React, { useState } from 'react';
import Carousel from "react-multi-carousel";
import "react-multi-carousel/lib/styles.css";

    const SampleCode = props => {
    const [maindata, setMaindata] = useState([{'name':"one"}, 
    {'name':"two"}]);
    const responsive = {
    desktop: {
        breakpoint: { max: 3000, min: 1024 },
        items: 3,
        slidesToSlide: 3 // optional, default to 1.
    },
    tablet: {
        breakpoint: { max: 1024, min: 464 },
        items: 2,
        slidesToSlide: 2 // optional, default to 1.
    },
    mobile: {
        breakpoint: { max: 464, min: 0 },
        items: 1,
        slidesToSlide: 1 // optional, default to 1.
    }
    };

    return (
    <div>

    <Carousel
    swipeable={false}
    draggable={false}
    showDots={true}
    responsive={responsive}
    ssr={false} // means to render carousel on server-side.
    infinite={true}
    autoPlay={false}
    autoPlaySpeed={1000}
    keyBoardControl={true}
    customTransition="all .5"
    transitionDuration={500}
    containerClass="carousel-container"
    // removeArrowOnDeviceType={["tablet", "mobile"]}
    //deviceType={true}//{this.props.deviceType}
    dotListClass="custom-dot-list-style"
    itemClass="carousel-item-padding-40-px"
    className='location-jobs '
   >

       {
        maindata.map((each) => {
            return (
                <div className='item p-3 mx-3 d-flex'>
                    {each.name}
                </div>

            )
        })
        }

         </Carousel>
       </div>
    );

}

export default SampleCode;

It is having width issues like I was too using in my project, I have to set the width by using media queries. I don't know why the developer hasn't fixed the issue, but you can try giving a default width in inspect section and then setting up the width by using media queries.

发布评论

评论列表(0)

  1. 暂无评论