miliko0022
@miliko0022
Краткие личные сведения, включая интересующую вас

Что лучше использовать для начального значений функции или useMemo?

У меня есть вот такой компонент
Что лучше использовать для начального значения useState, функции или useMemo.

Я знаю только два способа дать начальные значения useState. Я привел два примера. Но я не уверен, какой способ лучше. Каковы плюсы и минусы? Или есть третий вариант?

вариант 1
function App(yardage, arrList, indxList) {
  const [flippingListIndx, setFlippingListIndx] = useState(() => {
    const arrStart = Math.floor(indxList / yardage) * yardage;
    if (indxList < arrList.length) {
      return arrStart + yardage;
    } else {
      return arrStart - yardage;
    }
  });
  const [flippingList, setFlippingList] = useState(() => {
    const arrStart = Math.floor(indxList / yardage) * yardage;
    if (indxList < arrList.length) {
      return arrList.slice(arrStart, arrStart + yardage);
    } else {
      return arrList.slice(arrStart - yardage, arrStart);
    }
  });
  return (
    ....
  );
}


в принципе второй вариант это не начальное значение но можно и так сказать.

вариант 2
function App(yardage, arrList, indxList) {
  const [flippingListIndx, setFlippingListIndx] = useState(0);
  const [flippingList, setFlippingList] = useState([]);

  useMemo(() => {
      const arrStart = Math.floor(indxList / yardage) * yardage;
      if (indxList < arrList.length) {
          setFlippingList(
              arrList.slice(
                  arrStart,
                  arrStart + yardage
              )
          );
          setFlippingListIndx(arrStart + yardage);
      } else {
          setFlippingList(
              arrList.slice(
                  arrStart - yardage,
                  arrStart
              )
          );
          setFlippingListIndx(arrStart - yardage);
      }
  }, [arrList, yardage, indxList])
  return (
    ....
  );
}
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Второй вариант переопределит вам состояние при изменении arrList, yardage, indxList. Лучше первый.
Лучше первый. Третьим вариантом будет использование классовых компонентов, код, которых в ряде случаев будет как минимум читаемее.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы