Сортируйте массив на основе состояния Redux, затем измените состояние - PullRequest
0 голосов
/ 02 мая 2019

У меня есть приложение Redux Memory, и в моем состоянии Redux у меня есть массив из 16 карточных объектов. Я хочу рандомизировать массив объектов Card на основе свойства состояния Redux с именем randomize

Я попытался отсортировать карты изнутри редуктора и удалив свойство randomize:

const INITIAL_STATE = {
 deck: sort([{name: "Card 1"}, {...}, ...]),
 ...
}

Но это портит мои клики в моем поле 4х4. Когда я нажимаю на карту, выбирается карта, отличная от той, на которую я нажал. Алгоритм sort не должен быть проблемой:

function sort(cards) {
  const deck = cards;

  let currentIndex = deck.length;
  let temporaryValue;
  let randomIndex;

  while (currentIndex !== 0) {
    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    // And swap it with the current element.
    temporaryValue = deck[currentIndex];
    deck[currentIndex] = deck[randomIndex];
    deck[randomIndex] = temporaryValue;
  }

  return deck;
}

Я бы хотел отсортировать карточки внутри компонента без состояния:

import { connect } from "react-redux";
import { select_card } from "../Redux/Actions/actions";
import CardField from "./CardField";

const getRandomizedDeck = (deck, randomize) => {
  if (randomize) {
    return sort(deck);
    // Change randomize to false somewhere
  }
};

const mapStateToProps = state => ({
  deck: getRandomizedDeck(state.deck, state.randomize),
  backside: state.backside
});

const mapDispatchToProps = dispatch => ({
  onClick: (id, name) => {
    dispatch(select_card(id, name));
  }
});

const RandomizedDeck = connect(
  mapStateToProps,
  mapDispatchToProps
)(CardField);

export default RandomizedDeck;

1 Ответ

0 голосов
/ 03 мая 2019

Я обнаружил, что моя проблема была не в сортировке или отправке действия, а в том, что мой редуктор проверял неправильные id после сортировки карт.

Чтобы ответить на мой вопрос, я нашел, что лучше добавить действие с именем RESET_GAME и сделать так, чтобы мои действия сортировали мои карты в редукторе следующим образом:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...