У меня есть приложение 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;