代码之家  ›  专栏  ›  技术社区  ›  Micah Pearce

React-Redux状态不会更新onClick

  •  0
  • Micah Pearce  · 技术社区  · 6 年前

    游戏板.types.js

    const GameBoardActionTypes = {
      FORCE_GAMEBOARD_HIDDEN: 'FORCE_GAMEBOARD_HIDDEN'
    }
    export default GameBoardActionTypes;
    

    游戏板.action.js

    import GameBoardActionTypes from './game-board.types';
    export const forceGameBoardHidden = value => ({
      type: GameBoardActionTypes.FORCE_GAMEBOARD_HIDDEN,
      payload: value
    });
    

    游戏板.reducer.js

    import GameBoardActionTypes from './game-board.types'
    const INITIAL_STATE = {
      force_hidden: false
    }
    const gameBoardReducer = ( state = INITIAL_STATE, action) => {
      switch (action.type) {
        case GameBoardActionTypes.FORCE_GAMEBOARD_HIDDEN:
          return {
            ...state,
            force_hidden: action.payload
          }
        default:
          return state;
      }
    }
    export default gameBoardReducer;
    

    根部减速器

    import { combineReducers } from 'redux';
    import gameBoardReducer from './game-board/game-board.reducer'
    export default combineReducers ({
      gameboard: gameBoardReducer
    })
    

    商店.js

    const middlewares = [];
    const store = createStore(rootReducer, applyMiddleware(...middlewares))
    export default store;
    

    <Provider store={store}>
    

    应用程序.js--这就是forceGameBoardHidden中魔法应该发生的地方

    const App = () => {
      const handleKeyChange = event => {
        setKey(event.target.value);
        console.log("before change")
        forceGameBoardHidden(true)
        console.log(store.getState().gameboard)
      }
      return (
          <SearchBox 
              onChange={handleKeyChange}
              placeholder="Enter your game Key"/>
        </div>
      );
    }
    
    const mapDispatchToProps = dispatch => ({
      forceGameBoardHidden: item => dispatch(forceGameBoardHidden(item))
    })
    
    export default connect(null,mapDispatchToProps)(App);
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   CevaComic    6 年前

    我认为您需要分派操作,有两种方法,一种是将组件连接到操作并将它们绑定到分派。另一个更简单,因为您使用功能组件,就是使用useDispatch钩子

    示例如下:

    import { useDispatch } from 'react-redux' // <-- add this 
    
    const App = () => {
    
        const dispatch = useDispatch() // <-- add this 
    
      const handleKeyChange = event => {
        setKey(event.target.value);
        console.log("before change")
        dispatch(forceGameBoardHidden(true)) // <-- change this
        console.log(store.getState().gameboard)
      }
      return (
          <SearchBox 
              onChange={handleKeyChange}
              placeholder="Enter your game Key"/>
        </div>
      );
    }