如何在 React.js 中实现 cloudinary Product Gallery

how to implement cloudinary Product Gallery in React.js

我正在尝试在我的电子商务项目中使用 Cloudinary Product Gallery,但不知道如何实现它。

此 Cloudinary 产品库:https://cloudinary.com/documentation/product_gallery

我想在这个组件中实现。

    class FullProduct extends Component {
      render() {
       return <div id="my-gallery"></div>;
    }
  }

试试这个。为了让第三方库控制 React 组件中的某些元素,您需要将它们绑定到 React lifecycle methods(对于函数组件,它将是 useEffect)。假设您正在使用 Create React App.

首先,在您的 public/index.html 文件中添加脚本导入。

<script src="https://product-gallery.cloudinary.com/all.js" type="text/javascript"></script>

使用函数组件会是这样的:

const FullProduct = () => {
  const cloudnaryGalleryRef = useRef(null);

  useEffect(() => {
    if (!cloudnaryGalleryRef.current) {
      cloudnaryGalleryRef.current = cloudinary.galleryWidget({
        container: '#my-gallery',
        cloudName: 'demo',
        mediaAssets: [
          { tag: 'electric_car_product_gallery_demo' },
          { tag: 'electric_car_product_gallery_demo', mediaType: 'video' },
          { tag: 'electric_car_360_product_gallery_demo', mediaType: 'spin' }
        ]
      });
    }
  }, []);

  return <div id="my-gallery" />;
};

然后您可以使用 cloudnaryGalleryRef.current 访问库为您提供的所有方法。

在您的 public/index.html 文件中添加脚本导入后,如@alyson Maya 所述。 您可以通过 Window 对象访问您的资源,这工作得很好。

    class FullProduct extends Component {
      componentDidMount() {
      const myWidget = window.cloudinary.galleryWidget({
      cloudName: "cloudName",
      container: "#my-gallery",
      mediaAssets: [
        {
          publicId: "products/excmml5kpl",
          mediaType: "image"
        },
        {
          publicId: "products/fl7t8wqkytac7",
          mediaType: "image"
        }
      ],
      displayProps: {
        mode: "classic"
      },
      transition: "slide",
      themeProps: {
        active: "#49c58f"
      },
      aspectRatio: "square",
      zoomProps: {
        trigger: "click"
      },
      carouselLocation: "left",
      carouselStyle: "indicators",
      indicatorProps: {
        shape: "round"
      }
    });
    myWidget.render();
  }
  render() {
    return <div id="my-gallery" className={classes.Gallery}></div>;
  }
}