2017-04-05 5 views
1

設定されていないブール型変数を除き、Reduxリデューサが動作します。コード:Redux Reducerはブール型オブジェクトプロパティを設定しません

const GameBoardReducer = function(state, action) { 
    if(state === undefined) { 
    let state = { 
     rows: BOARD_ROWS, 
     cols: BOARD_COLS, 
     width: Math.min(document.body.clientWidth * 0.9, 1184), 
     board: [], 
     running: false, 
     framesPerSec: 5, 
    } 
    for(var i=0 ; i<BOARD_ROWS ; i++) { 
     state.board.push([]); 
     for(var j=0 ; j<BOARD_COLS ; j++) { 
     state.board[i].push(Math.random()<0.15? FIELD_ALIVE: FIELD_DEAD); 
     } 
    } 
    return state; 
    } 

    switch(action.type) { 
    case SET_BOARD_ACTION:  
    return { ...state, board: action.payload }; 
    case RUN_ACTION: 
    console.log("RunAction:", action.payload); 
    return { ...state, running: action.payload }; 
    } 

    return state; 
} 

コンソールが

runAction関数を示しています。本当の

をしかし、コンテナ内の値:this.props.gameBoard.runningはまだfalseです。

なぜですか?

フルペン:あなたのペンでhttp://codepen.io/lafisrap/pen/yMZyXw

+0

ライフゲームが実行中で停止する必要がありますか? – Michael

答えて

1

、あなたはsetIntervalでゲームボードへの参照を保持し、それが実行しているかどうかを確認するためにそれをチェックするのではなく、this.propsでゲームボードをチェックしています。次の変更を試してください:

this.state = { 
     interval: setInterval(() => this.calcNextGeneration(), ms)  
    }; 

calcNextGeneration() { 
    console.log("calcNextGeneration", this.props.gameBoard.running); 
    if(!this.props.gameBoard.running) return; 
... 
関連する問題