【问题标题】:Slider won't show images in ReactJS滑块不会在 ReactJS 中显示图像
【发布时间】:2021-10-04 14:08:38
【问题描述】:

我正在 ReactJS 中创建一个 Slider。我将图像放在一个数组(dataSldier.js)中,我将其导入到(Slider.js)文件中,但我的图像没有显示。我的箭头图标正在显示,所以很混乱。 我的代码编译成功,但是我的滑块是空白的,只显示导航箭头。请问我做错了什么?

这是滑块 ::: 的代码

import React, { useState } from 'react'
import './Slider.css'
import BtnSlider from './BtnSlider'
import dataSlider from './dataSlider'


export default function Slider() {

    const [slideIndex, setSlideIndex] = useState(1)

    const nextSlide = () => {
        if(slideIndex !== dataSlider.length){
            setSlideIndex(slideIndex + 1)
        }
        else if (slideIndex === dataSlider.length){
            setSlideIndex(1)
        }

    }

    const prevSlide = () => {
        if(slideIndex !== 1){
            setSlideIndex(slideIndex - 1)
        }
        else if (slideIndex === 1){
            setSlideIndex(dataSlider.length)
        }
    }

    const moveDot = index => {
        setSlideIndex(index)
    }
    return (
        <div className="container-slider">
            {dataSlider.map(({imgPath, index}) => {
                return (
                    <div
                        key={index} 
                        className={slideIndex === index + 1 ? "slide active-anim" : "slide"}>
                        <img
                            src={imgPath}
                            alt=""
                        />
                    </div>
                )
            })}
            <BtnSlider moveSlide={nextSlide} direction={"next"}/>
            <BtnSlider moveSlide={prevSlide} direction={"prev"}/>

            <div className="container-dots">
                {Array.from({length: 5}).map((item, index) => (
                    <div 
                    onClick={() => moveDot(index + 1)} 
                    className={slideIndex === index + 1 ? "dot active" : "dot"}
                    ></div>
                ))}
            </div>
        </div>
    )
}

这是图片的dataSlider :::

import hic from '../Imgs/IMG_0061.jpg'
import fic from '../Imgs/IMG_6855.jpg'
import vic from '../Imgs/IMG_2002.jpg'
import ric from '../Imgs/IMG_2003.jpg'
import oic from '../Imgs/IMG_0096.jpg'


    const dataSlider = [
        {
            imgPath :{hic},
        },
        {
            imgPath : {fic},
        },
        {
            imgPath: {vic}, 
        },
        {
            imgPath : {ric},
        },
        {
            imgPath : {oic},
        },
    ];
    
    export default dataSlider;

CSS 代码::

.container-slider {
  max-width: 700px;
  height: 500px;
  margin: 100px auto 0;
  position: relative;
  overflow: hidden;
  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
}
@media screen and (max-width: 700px) {
  .container-slider {
    margin: 100px 10px 0;
  }
}
.slide {
  width: 100%;
  height: 100%;
  position: absolute;
  opacity: 1;
  transition: opacity ease-in-out 0.4s;
}
.slide img {
  width: 600px;
  height: 600px;
  object-fit: cover;
}
.active-anim {
  opacity: 1;
}

.btn-slide {
  width: 60px;
  height: 60px;
  border-radius: 50%;
  background: #5f0b5f;
  border: 1px solid rgba(34, 34, 34, 0.287);
  position: absolute;
  display: flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;
}

.btn-slide img {
  width: 25px;
  height: 25px;
  pointer-events: none;
}
.prev {
  top: 50%;
  left: 20px;
  transform: translateY(-60%);
}
.next {
  top: 50%;
  right: 20px;
  transform: translateY(-60%);
}

.container-dots {
  position: absolute;
  bottom: 10px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
}
.dot {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 3px solid #f1f1f1;
  margin: 0 5px;
  background: #f1f1f1;
}
.dot.active {
  background: rgb(32, 32, 32);
}

【问题讨论】:

    标签: reactjs slider


    【解决方案1】:

    我觉得问题出在这里

                {dataSlider.map(({imgPath, index}) => {
    

    索引应该像这样在外面:

            {dataSlider.map(({imgPath}, index) => {
    

    【讨论】:

    • 谢谢吉米。我试过只是这样做,但它仍然是空白的。箭头正在显示,当我单击它们时,点正在移动,但没有显示图像
    【解决方案2】:

    这有点难以猜测,没有更详细的代码,但我认为,由于您使用 import 语句在 dataSlider 文件中导入图像,因此您不需要将它们包装在额外的 需要。

    试试这样:

     <img src={imgPath}
    

    插入

    <img src={require(`../Imgs/${imgPath}.jpg`)}
    

    查看此问题以了解有关如何在反应中使用静态图像的更多详细信息: How do I reference a local image in React?

    【讨论】:

    • 感谢@Giorgi Andriadze ...我已经进行了更正,但结果仍然相同
    • 能否检查控制台日志,看看是否有任何错误?
    • index.js:1 警告:列表中的每个孩子都应该有一个唯一的“key”道具。检查Slider 的渲染方法。有关更多信息,请参阅reactjs.org/link/warning-keys。在滑块的 div (localhost:3000/static/js/main.chunk.js:579:93) 在 App 的 div
    • 这是控制台日志中显示的内容。因为我做了 key={index},所以我想使用索引覆盖来没有键。它还说检查 Slider 的渲染方法??
    • 我在没有 css 和按钮的情况下测试了您的代码,它运行良好,图像渲染正确。所以它可能是两件事,图像导入由于路径错误或您遇到 CSS 问题而无法正常工作。我建议您使用浏览器检查器检查它,看看 元素是否正确呈现,是否具有正确的大小、来源和其他内容。
    【解决方案3】:

    我找到了一个非常适合我的解决方案。当我在包含许多图像的数组上迭代/映射时,问题就出现了。

    首先;

    我将数组更改为:

    const dataSlider = [
        {
            imgPath : require('../Imgs/IMG_0061.jpg')
        },
        {
            imgPath : require('../Imgs/IMG_6855.jpg')
        },
        {
            imgPath : require('../Imgs/IMG_2002.jpg') 
        },
        {
            imgPath : require('../Imgs/IMG_2003.jpg')
        },
        {
            imgPath : require('../Imgs/IMG_0096.jpg')
        },
    ];
    
    export default dataSlider;
    

    这是包含我正在映射的本地图像的数组。我用'Require'包装了每个图像路径,所以你必须这样做。

    其次::

    在我导入此图像以进行迭代的组件中,我将 src 属性更改为 :::

    <img
        src={imgPath.default}
        alt={'image holder'}
        />
    

    命名“src”路径时需要“默认”属性。 'alt' 可以变化。

    我希望这可以帮助其他面临同样挑战的人。谢谢

    【讨论】:

      猜你喜欢
      • 2013-01-25
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 2019-01-05
      • 2021-01-21
      • 2018-11-07
      相关资源
      最近更新 更多