React Native Redux Reducer не работает - PullRequest
0 голосов
/ 06 мая 2018

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

App.js:

import {Provider} from 'react-redux';
import configureStore from './src/config/configureStore.js';
const store = configureStore();

export default class App extends React.Component {    
render() {
return (
  <Provider store = {store}>
      <RootStack />
  </Provider>
);
}
}

configureStore.js:

import {createStore, applyMiddleware} from 'redux';
import reducers from '../reducers';
import thunk from 'redux-thunk';

export default function configureStore(initialState) {
  const store = createStore (
    reducers,
    applyMiddleware(thunk)
  );
  return store;
}

действия / index.js:

export const saveRisk = (payload) => {
  console.log('saved RISK!');
  return (dispatch) => {
    dispatch({type: 'risk_chosen',payload: payload});
  }
}

редукторы / index.js:

import { combineReducers } from 'redux';
import RiskReducer from './RiskReducer';

export default combineReducers({
  risk_level: RiskReducer
});

RiskReducer.js

const INITIAL_STATE = {risk_level: false};
export default (risk = INITIAL_STATE, action) => {
  if(action.type === 'risk_chosen') {
    console.log('RISK REDUCER SUCCESSFUL')
    return {
      ...risk, risk_level: action.payload
    };
  }
  console.log('REDUCER RISK:');
  console.log(risk);
  return risk;
}

RiskTolerance.js (дочерний компонент в RootStack, который использует приставку):

import { connect } from 'react-redux';
import {saveRisk} from '../../actions'
@connect(state => ({risk_level: state.risk_level.risk_level}, {saveRisk}))
export default class RiskTolerance extends React.Component {
 //   ...
  componentDidMount(){
    console.log(this.props.risk_level);
 // ^^returns undefined, despite the reducer initializing it to "false"
    let riskVal = 'something'
    this.props.saveRisk(riskVal)
  }
 //   ...
}

РЕДАКТИРОВАТЬ: я изменил начальное значение в редуктор на соответствующий объект, но мой редуктор все еще не работает после вызова действия. Есть идеи? Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Разобрался, при вызове действия мне нужно было написать:

this.props.dispatch(this.props.saveRisk(riskVal))

Спасибо всем за помощь!

0 голосов
/ 06 мая 2018

Есть проблема с начальным состоянием в вашем редукторе. Внесите изменения, как показано ниже:

INITIAL_STATE = { risk_level: false }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...