Реагируйте, как я могу приблизиться к значению тега ?

#javascript #node.js #reactjs

Вопрос:

 import React, { useState, useEffect } from "react";
import { addCart, getInventory } from "../../Service/Service";

function InventroyDry85(props) {
  const [inventory, setInventory] = useState([]);

  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  const [toggle, setToggle] = useState(true);

  useEffect(() => {
    refreshPage();
  }, []);
  
  useEffect(() => {

    inventory.forEach((item)=>{
      if(item.Quantity === 0){
        setToggle(false)
      }
    })

  }, [inventory]);

 

  function refreshPage() {
    setLoading(true);

    getInventory()
      .then((json) => {
        setInventory(json);

        setLoading(false);
      })
      .catch((err) => {
        console.error(err);
        setError(err);
      });
  }

  if (loading)
    return (
      <div className="alert alert-info">
        Please stand by while we connect your call....
      </div>
    );
  if (error)
    return (
      <div className="alert alert-danger">There was an error loading...</div>
    );

  async function addCartButton(e) {
    await addCart(e.target.value);
    reloadPage();
  }


  function reloadPage() {
    window.location.reload(false);

    
  }
  return (
    <div className="col">
      <table className="table">
        <thead>
          <tr>
            <th>SKU</th>
            <th>Name</th>
            <th>Quantity</th>
            <th>Price</th>
            <th>Add</th>
          </tr>
        </thead>
        <tbody>
          {inventory.map((item) => (
            <tr>
              <td>{item.SKU}</td>
              <td>{item.Name}</td>
              <td>{item.Quantity}</td>
              <td>{item.Price}</td>
              <td>
                {toggle ? (
                  <button
                    className="alert-primary alert"
                    value={item.SKU}
                    onClick={addCartButton}
                  >
                    Add
                  </button>
                ) : (
                  <button className="alert">Out of Stock</button>
                )}
              </td>
            </tr>
          ))}
        </tbody>
      </table>
    </div>
  );

  
}

export default InventroyDry85;
 

Это мой код.
Состояние инвентаризации содержит массив файлов JSON, таких как

{"SKU":"59779-642","Name":"Napkin - Beverage 1 Ply","Price":37.99,"Quantity":1}

переключатель-это состояние (по умолчанию верно, чтобы показать кнопку добавить) Если переключатель имеет значение false, кнопка должна измениться на «Нет в наличии».

Состояние запасов получает значение от сервера узла, поэтому оно продолжает меняться.

Вопрос

Я пытаюсь создать функцию, когда количество запасов равно 0, состояние переключения изменяется на false, чтобы изменить кнопку.

Поэтому я стараюсь использовать эффект вот так…

   
  useEffect(() => {

    inventory.forEach((item)=>{
      if(item.Quantity === 0){
        setToggle(false)
      }
    })

  }, [inventory]);

 

Но это просто меняет состояние переключения на false и делает кнопку » Все » недоступной, даже в инвентаре. количество все еще не равно 0…

Как я могу это исправить?

Комментарии:

1. Я думаю, что вы должны поддерживать состояние кнопки «нет в наличии» на основе количества товара, а не состояния переключения (которое, по-видимому, является общим для всех товаров). Вы можете напрямую проверить наличие item.quantity ? <AddToCartButton>: <OutOfStockButton>

2. Правильно, Абхишек Шарма!!! Спасибо