Неперехваченная ошибка: Не удается добавить узел 1, потому что узел с этим идентификатором уже находится в хранилище

#reactjs

Вопрос:

Я получаю ошибку, Uncaught Error: Cannot add node 1 because a node with that id is already in the Store. когда пытаюсь использовать функцию.

вот моя функция:

 import { useEffect, useState } from "react";
import "./styles.css";

export default function App() {
  const [value, setValue] = useState(0);
  const slides = ["one", "two", "thre"];
  let size = slides.length;

  useEffect(() => {
    setValue(size);
  }, [size]);

  const prev = () => {
    if (size amp;amp; size < 1 amp;amp; size amp;amp; size > slides.length) return;
    size--;
  };

  const next = () => {
    if (size amp;amp; size < 1 amp;amp; size amp;amp; size > slides.length) return;
    size  ;
  };

  return (
    <div className="slider">
      <a href="/" className="prev" onClick={prev}>
        Previous
      </a>
      <h2>Barking Road, London {value}</h2>
      <a href="/" className="next" onClick={next}>
        Next
      </a>
    </div>
  );
}
 

Я хочу, чтобы пользователь мог нажимать до 1 минуты и 3 максимум. но это не работает.

ЛивеДемо

Ответ №1:

На самом деле вам не нужно useEffect , чтобы достичь этого, также измените свой <a> тег на <button>

Рабочий фрагмент:

     function App() {
      const [value, setValue] = React.useState(1);
      const slides = ["one", "two", "thre"];

      const prev = () => {
        if (value > 1) setValue(value - 1);
      };

      const next = () => {
        if (value < slides.length) setValue(value   1);
      };

      return (
        <div className="slider">
          <button className="prev" onClick={prev}>
            Previous
          </button>
          <h2>Barking Road, London {value}</h2>
          <button className="next" onClick={next}>
            Next
          </button>
        </div>
      );
    }

    const rootElement = document.getElementById("root");
    ReactDOM.render(<App />, rootElement); 
     <script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
    <div id="root"></div> 

Ответ №2:

Просто обновите вот так:

   const prev = () => {
    if (value <= 1) return;
    setValue(value - 1);
  };

  const next = () => {
    if (value >= slides.length) return;
    setValue(value   1);
  };
 

И измените тег на другой тег: https://codesandbox.io/s/stupefied-robinson-yjmkm?file=/src/App.tsx