我需要循环通过数据中的列表列表中的列表并检索索引,以便在我的Reactjs项目中显示它们.我似乎找不到一种正确的方法,既不会在索引走得太远时出错,也不会在屏幕上逐个显示的内部显示多个索引.

以下是代码的数据,如果它清除了任何东西:

const recettes = [
  {
    id: 0,
    nom: "Quiche aux poireaux",
    tprep: "1h35",
    portions: 6,
    ingredients: [
      {
        nom: "Pâte brisée",
        qte: "1",
      },
      {
        nom: "Oeufs",
        qte: "6",
      },
      {
        nom: "Poireau emincé",
        qte: "240g",
      },
      {
        nom: "Fromage gruyère",
        qte: "125g",
      },
      {
        nom: "Crème 35%",
        qte: "500ml",
      },
    ],
    preparation:
      "Étaler la pâte dans un moule à tarte. Faire cuire le poireau dans le beurre 5 minutes ou jusqu'à ce qu'il soit tombé. Dans un bol, fouetter les œufs. Ajouter la crème, les trois quarts du poireau et le fromage. Poivrer. Verser dans la croûte. Répartir le reste du poireau. Cuire au four 1 h 15 ou jusqu'à ce que la quiche soit légèrement dorée et que le centre soit tout juste pris. Couper en pointes et servir.",
  },
  {
    id: 1,
    nom: "Curry de pois chiches et chou-fleur",
    tprep: "20 minutes",
    portions: 2,
    ingredients: [
      {
        nom: "Coriandre moulue",
        qte: "10 ml",
      },
      {
        nom: "Garam masala",
        qte: "10 ml",
      },
      {
        nom: "Gingembre moulu",
        qte: "2,5 ml",
      },
      {
        nom: "Ail émincé",
        qte: "1/2 gousse",
      },
      {
        nom: "Harissa",
        qte: "1 ml",
      },
      {
        nom: "Têtes de chou-fleur",
        qte: "200g",
      },
      {
        nom: "Pois chiches rincés",
        qte: "400 ml",
      },
      {
        nom: "Oignon émincé",
        qte: "1",
      },
      {
        nom: "Huile d'olive",
        qte: "30 ml",
      },
      {
        nom: "Lait de coco",
        qte: "160 ml",
      },
    ],
    preparation:
      "Dans une poêle à feu moyen, attendrir l'oignon dans l'huile 5 minutes. Ajouter le mélange d'épices et l'ail et poursuivre la cuisson 2 minutes en remuant. Ajouter le mélange de chou-fleur, le lait de coco et l'eau. Porter à ébullition et laisser mijoter 10 minutes ou jusqu'à ce que le chou-fleur soit tendre. Ajouter de l'eau au besoin. Servir avec des quartiers de lime et des pains naans grillés, si désiré.",
  },
];

下面是显示它们的react 代码:

export default function Recette() {
  const [counter, setCounter] = useState(0);

  if (counter < 0) {
    setCounter(counter + 1);
  }

  return (
    <>
      <div className="name-page">
        <br />

        <div className="topBlock">
          <div className="Recette-name">
            <div className="Section-button">
              <button
                onClick={() => setCounter(counter - 1)}
                className="buttons"
              >
                <div className="button-text">Precedant</div>
              </button>{" "}
              <button
                onClick={() => setCounter(counter + 1)}
                className="buttons"
              >
                <div className="button-text">Suivant</div>
              </button>
            </div>
            <div className="text-section-name">
              <h2>{donnees[counter].nom}</h2>

              <h3>Temp de preparation: {donnees[counter].tprep} </h3>

              <h3>Portions: {donnees[counter].portions} </h3>
            </div>
          </div>

          <div className="Recette-image">
            <img className="quiche" src={quiche}></img>
          </div>
        </div>

        <br />

        <div className="bottomBlock">
          <div className="Recette-ingredients">
            <h3 className="recette-title">Ingredients</h3>
            <li className="ingredient-list">
              <h4 className="recette-data-name">
                {donnees[counter].ingredients[0].nom}
              </h4>{" "}
              <h4 className="recette-data-qte">
                {donnees[counter].ingredients[0].qte}
              </h4>
            </li>
          </div>

          <div className="Recette-Preparation">
            <h3 className="preparation-title">Preparation</h3>
            <h4 className="preparation-textArea">{donnees[0].preparation}</h4>
          </div>
        </div>
      </div>
    </>
  );
}

我使用useState函数来计算我想要访问并正确显示的列表的主索引,但我try 将其添加到a,以查看是否会显示更多,但只有一个本身显示. 我try 使用"map"对象,但我不知道如何在不超出列表索引的情况下正确地使其循环

推荐答案

解决这个问题的一种方法是创建一个处理next/previous功能的函数.

function cycleCounter(delta) {
  // use the callback function to get the previous value.
  setCounter((prev) => {
    // get the new counter
    const newCounter = prev + delta;
    // check if its below 0 then return the length to go to the last
    if (newCounter < 0) return donnees.length;
    // check if its bigger than the length then return 0
    if (newCounter >= donnees.length) return 0;
    // if we're not on a edge simply return the new counter
    return newCounter;
  });
}

现在,您可以对按钮使用此函数,并传递要循环的delta.

<div className="Section-button">
  <button onClick={() => cycleCounter(-1)} className="buttons">
    <div className="button-text">Precedant</div>
  </button>{" "}
  <button onClick={() => cycleCounter(+1)} className="buttons">
    <div className="button-text">Suivant</div>
  </button>
</div>

要显示当前食谱的所有配料,可以使用.map,如下所示

<ul>
  {donnees[counter].ingredients.map((ingredient) => (
    <li className="ingredient-list">
      <h4 className="recette-data-name">{ingredient.nom}</h4>
      <h4 className="recette-data-qte">{ingredient.qte}</h4>
    </li>
  ))}
</ul>

Reactjs相关问答推荐

Firebase删除UserWithEmail AndPassword仅创建匿名用户

react 副作用循环

TypeError:SearchProduct.get()获得了意外的关键字参数查询'

有没有办法在Shopify中显示自定义计算的交货日期?

有没有办法将MUI网格元素与Flex-Start对齐?

当useEffect和onClick处理程序都调用useCallback函数时,有没有办法对useEffect产生额外的影响?

如何使用useState响应快速/顺序状态更新

滚动视图样式高度没有任何区别

如何将 npm 包添加到我的 Vite + React 应用程序中?

Syncfusion:带有 TabItemsDirective 的选项卡组件不显示任何内容

无法通过react 路由中的链接传递信息

React设置上下文并进行导航

如何让 useEffect 在 React.JS 中只运行一次?

Select 项目后 Select HeadlessUI 组合框中的所有文本?

React v6 中的公共和私有路由

无法在 KeyDown 上调用 useCallback 函数

从 API 中提取映射数组后出现重复元素

将 dict 值转换并插入到react 钩子的列表中

在状态中存储多个选定的选项

添加禁用的默认选项以 Select