在React中使用索引渲染数组元素

极客 :

我正在尝试在网站上构建一种不同组件的幻灯片放映。我已将所需的幻灯片作为单个元素导入,并将它们存储在数组中。我已经编写了基本结构,但是不知道如何使用索引来呈现存储在数组中的组件。

import React, {useState} from 'react';
import Slide1 from './slides/slide1.js';
import Slide2 from './slides/slide2.js';
import Slide3 from './slides/slide3.js';
import Slide4 from './slides/slide4.js';
import Slide5 from './slides/slide5.js';

function Presentation({slides,index}) {
    return(
        <div className="presentation">
            <React.Fragment key={index}> {slides[index]} </React.Fragment>  
        </div>
    )
}

function Buttons({index, setIndex, size}) {
    const nextSlide = (index) => {
        if(index<size-1) setIndex(++index)
    }
    const prevSlide = (index) => {
        if(index>0) setIndex(--index)
    }
    return(
        <nav className="buttons">
            <button onClick={(index)=>prevSlide}> Previous </button>
            <button onClick={(index)=>nextSlide}> Next </button>
        </nav>
    )
}

function Main() {
    const slides = [Slide1, Slide2, Slide3, Slide4, Slide5]
    const [index,setIndex] = useState(0);
    return(
        <main>
            <Presentation slides={slides} index={index}/>
            <Buttons index={index} setIndex={setIndex} length={slides.length}/>
        </main>
    )
}

export default Main;

但这是行不通的。有没有人有正确或更好的方法来做到这一点?

朱利安·皮卡德:

我重新编写了您的一些代码,因为我不知道幻灯片背后的确切代码。我将它们定义为标签,以使其更容易使用。

我更改了数组并在其中分配了JSX: const slides = [<Slide1 />, <Slide2 />];

index从组件中的许多代码中删除了代码Button,因为您将其作为道具进行了传递。

最后,您length在主组件中将道具作为道具传递给了Button组件,但是Button组件从size道具中读取了内容

希望这会有所帮助

import React, { useState } from "react";

const Slide1 = () => {
  return <h1>SLIDE 1</h1>;
};

const Slide2 = () => {
  return <h1>SLIDE 2</h1>;
};

function Presentation({ slides, index }) {
  const renderSlide = () => {
    return slides[index];
  };
  return <div className="presentation">{renderSlide()}</div>;
}

function Buttons({ index, setIndex, size }) {
  const nextSlide = () => {
    if (index < size - 1) setIndex(i => i + 1);
  };
  const prevSlide = () => {
    if (index > 0) setIndex(--index);
  };
  return (
    <nav className="buttons">
      <button onClick={prevSlide}> Previous </button>
      <button onClick={nextSlide}> Next </button>
    </nav>
  );
}

function Main() {
  const slides = [<Slide1 />, <Slide2 />];
  const [index, setIndex] = useState(0);
  return (
    <main>
      <Presentation slides={slides} index={index} />
      <Buttons index={index} setIndex={setIndex} size={slides.length} />
    </main>
  );
}

export default Main;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Reagent中使用colspan渲染表元素

在React中使用map渲染元素

无法在React Native中使用地图渲染数组元素

在React中使用'keys'渲染输入框/按钮的数组

如何在React中使用对象数组渲染组件

使用React渲染HTMLAudioElement DOM元素

为什么在Bash中使用未设置的变量作为数组索引返回元素0?

如何在React中使用setState更新数组元素?

在渲染器中使用不同的html元素时,如何在TypeScript中使用React.forwardRef

在React渲染中在array中使用array

从React中的数组渲染随机元素

从React中的对象数组渲染元素

在React中使用变量渲染组件

在React中使用Array中的数组进行循环渲染

在Matlab中使用字符串命名数组元素的索引

使用索引数组查找数组的元素(Ruby)

在React中使用map渲染列表项

在jQuery中使用index()获取元素的索引

如何在 PHP 中使用正则表达式或数组索引访问 JSON 元素

在数组中使用数组但丢失索引

从 React 中的数据数组渲染单个元素

在无渲染 React 中使用复选框选择隐藏或显示元素

如何在 React 中使用条件渲染

如何更新 ForEach 而无需渲染所有 ForEach 数组,在 SwiftUI 中使用绑定元素?

在python中使用数组索引更新数组

当数组为空时,在 redux react 中使用索引插入/更新数组中的对象

在数组中渲染 React 元素

在 React 中使用唯一键 id 时,子列表元素仍会重新渲染

在 React 中使用条件渲染但未定义存储元素的变量?