Обновление Redux Store, но нет обновленного состояния в mapStateToProps - PullRequest
0 голосов
/ 11 мая 2019

У меня есть резервный магазин, который я обновляю из службы. Действие отправлено. Store.getState () возвращает обновленное состояние, но в mapStateToProps () отображается начальное состояние.

Попробовал прочитать документы, описывающие устранение неполадок, но не повезло. Я добавляю примеры кода, в которых я застрял.

Руководства по устранению неполадок в соответствующих и некоторые вопросы по SO. https://react -redux.js.org / устранение неисправностей https://redux.js.org/troubleshooting

Я использую Ignite2 (https://github.com/infinitered/ignite), который имеет шаблон как показано ниже

//index.js for reducers
//EDIT:
import { combineReducers } from 'redux'
import configureStore from './CreateStore'
import rootSaga from '../Sagas/'

/* ------------- Assemble The Reducers ------------- */
export const reducers = combineReducers({
  search: require('./SearchRedux').reducer,
  playerStateReducer: require('./PlayerStateReducer'),
})

export default () => {
  let { store, sagasManager, sagaMiddleware } = configureStore(reducers, rootSaga)
 return store
}
//service.js 
//using react-native-track-player
    TrackPlayer.addEventListener('playback-state', (data) => {

module.exports = async function(store, data) {
TrackPlayer.addEventListener('playback-state', (data) => {
    store.dispatch({ type: 'UPDATE_PLAYER_STATE', currentState: data.state })
    console.log(store.getState(), data, "store and data")
//gives me updated state from store
})
}


//PlayerStateReducer.js

export const reducer = (state = 0, action) => {
    if (action.type == 'UPDATE_PLAYER_STATE') {
        return action.currentState 
    } else {
        return state
    }
}
//PlayerUI.js
...
...
const mapStateToProps = (state) => {
    console.log(state.playerStateReducer, "player state")
    //This gives me the initial state i.e. 0 
    return {
        playerState: state.playerStateReducer
  }
}
export default connect(mapStateToProps)(PlayerUI)

Я новичок в разработке React Native. Любая помощь будет принята с благодарностью.

Большое спасибо.

1 Ответ

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

Выпуск 1

Нет необходимости .reducer

import playerStateReducer from './PlayerStateReducer';

export const reducers = combineReducers({
  playerStateReducer,
});

Выпуск 2

Так как вы собираетесь выполнить асинхронное действие внутри вашего действия с избыточностью ... вам необходимо подключить промежуточное ПО redux-thunk к вашему хранилищу резервов ... и сделать что-то подобное

module.exports = (yourActionParam1, yourActionParam2) => async(dispatch) => {
    const payload = await someAsyncOp();
    dispatch({ type: 'UPDATE_PLAYER_STATE', payload });
};
...