45 votes

React-Redux - Aucun réducteur fourni pour les "pièces" clés

Je ne sais pas pourquoi j'obtiens les erreurs suivantes.

Je suis juste la configuration de mon magasin, des actions et des réducteurs, je n'ai pas appelé l'expédition sur rien pour le moment.

Attendu

App fonctionne très bien, Redux de l'état n'est pas mis à jour

Résultats

enter image description here

src/index.js

import React from 'react'
import ReactDOM from 'react-dom'

import { createStore, applyMiddleware, compose } from 'redux'
import { Provider } from 'react-redux'
import thunk from 'redux-thunk'
import reducer from './reducer'

import App from './App'
import css from './coinhover.scss'

const element = document.getElementById('coinhover');

const store = createStore(reducer, compose(
    applyMiddleware(thunk),
    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
));

ReactDOM.render(
    <Provider store={ store }>
        <App />
    </Provider>, element);

src/reducer/index.js

import { combineReducers } from 'redux'
import { coins } from './coins'

export default combineReducers({
    coins
});

src/reducer/actions/coins.js

import * as api from '../../services/api'
import { storage, addToPortfolio } from '../../services/coinFactory'

export const ADD_COIN = 'ADD_COIN'

export function getCoin(coin) {
    return dispatch => {
        api.getCoin(coin)
            .then((res_coin)  => addToPortfolio(res_coin))
            .then((portfolio) => dispatch(updatePortfolio(portfolio)));
    }
}

export function updatePortfolio(portfolio) {
    return {
        type: ADD_COIN,
        portfolio
    }
}

enfin src/reducer/coins/index.js

import { ADD_COIN } from './actions'

const initialState = [];

export default (state = initialState, action) => {
    switch(action.type) {
        case ADD_COIN:
            return action.portfolio;
        default:
            return state;
    }
}

84voto

Pineda Points 66

Votre problème réside dans la façon dont vous êtes l'importation de vos coins réducteur:

import { coins } from './coins'

Ce dernier tente d'obtenir un nommé exportation retourné à partir du fichier ./les pièces de monnaie.

Vous n'êtes pas à l'aide d'un nom seulement les exportations export default,, par conséquent, vous avez juste besoin d'importer le fichier comme suit:

import coins from './coins';

À l'aide de ce dernier résultat avec le fait qu' coins contient alors la valeur de export default; les pièces du réducteur.

6voto

Leon Gaban Points 1645

Ah je viens de le trouver, j'importais mal mon réducteur de pièces ...

 import { combineReducers } from 'redux'
import coins from './coins' // because I have coins/index.js

export default combineReducers({
    coins
});
 

au lieu de

 import { coins } from './coins'
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X