React, проблема с обновлением состояния

293
23 июня 2022, 15:20

Я пытаюсь создать кнопку которая будет перемешивать плейлист(массив объектов), а по второму клику возвращать не перемешанный плейлист. Почему-то setOldPlaylist не сохраняет предыдущее состояние. Я полагаю, проблема с обновлением состояния.

import React, { useState } from 'react'
import shuffleTracks from './shuffle'    
import { connect } from "react-redux";
function ShuffleButton({ setPlaylist, playlist, trackId }) {
  const [oldPlaylist, setOldPlaylist] = useState([]);
  const [shuffle, setShuffle] = useState(false);
  const handleShuffle = () => {
    if (shuffle) {
      setPlaylist(oldPlaylist);
      setShuffle(!shuffle);
    } else {
      setOldPlaylist(playlist);
      setPlaylist(shuffleTracks(playlist, trackId));
      setShuffle(!shuffle);
    }
  }
  return (
    <button onClick={handleShuffle} >
      <Shuffle />
    </button>
  )
}
const mapStateToProps = (state) => {
  return {
    playlist: state.playlist.playlist,
    trackId: state.player.trackId,
  };
};
const mapDispatchToProps = (dispatch) => {
  return {
    setPlaylist: (tmp) => dispatch(setPlaylist(tmp)),
  };
};
export default connect(mapStateToProps, mapDispatchToProps)(ShuffleButton);

Если в setOldPlaylist передавать любой другой элемент (объект, массив или переменную) помимо playlist, то код работает исправно. Буду благодарен если поможете или предложите более элегантное решение.

READ ALSO
Относительный путь к другой странице

Относительный путь к другой странице

Встретился с такой проблемой - не могу верно указать путь до второй страницы,самый простой шаг(выйти из той папки, где лежит основная страница...

244
Помогите с валидацией

Помогите с валидацией

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

232
Фильтрация массива с датами

Фильтрация массива с датами

Как отфильтрировать или отсортировать массив дат, чтобы в результате были даты, у которых количество минут равно 15?

187
отмена повторного нажатия

отмена повторного нажатия

есть у меня такое колесо, как отменить повторное нажатие кнопки ? у меня на данный момент если колесо остановилось, его можно ещё раз крутить

160