После вызова этих кодов:
let win = this.props.winnerValueRedux(this.state.winner);
console.log("win value (is redux working?) ==> " + win);
Результат:
win value (does redux work?) ==> [object Object]
После использования JSON.stringify()
я понял, что [object Object]
равно {"type":"WINNER_VALUE"}
, чтона самом деле отправленное действие , мы не увидели свойство value
, присутствующее в этом действии, поскольку его значение было undefined .
И ваш вопрос:
Выходными данными должно быть значение win (работает ли приставка?) ==> X. Мой редуктор написан неправильно?
Все хорошо, ничего не неправильно.Неправильно то, что мы ожидали, что значение переменной win
должно быть.
let win = this.props.winnerValueRedux(this.state.winner)
эквивалентно:
function winnerValueRedux(value){
return dispatch({type: actionTypes.WINNER_VALUE, value})
}
let win = winnerValueRedux(value);
И это ключ, возвращаемое значениеметода dispatch(action)
- это отправленное действие , которое является объектом .Вот почему вы получаете: win value (does redux work?) ==> [object Object]
Для получения дополнительной информации: рассылка (действие)
На данный момент мы понимаем, почему мы получили этот неожиданный результат.
Следующая часть проверяет, работает ли наше хранилище редуксов.
Я проверил и все заработало.Это демонстрационная версия: https://codesandbox.io/s/6xlv5rvqqk
Это коды, которые я использовал для отправки действий в хранилище с избыточностью:
if (result === "X") {
this.gameState.gameEnded = true;
this.props.winnerValueRedux("X"); //dispatch an action
} else if (result === "O") {
this.gameState.gameEnded = true;
this.props.winnerValueRedux("O"); //dispatch an action
} else if (result === "draw") {
this.gameState.gameEnded = true;
this.props.winnerValueRedux("draw"); //dispatch an action
}
Это коды, которые я использовал для получения состояния избыточности
<div id="state">{this.props.winnerValue}</div> // get value from redux store
Я старался изо всех сил.Надеюсь, это поможет.