2
votes

Violation invariante lors de l'utilisation de react-redux connect avec react-native

J'ai commencé à créer une application native react et je souhaite y ajouter un redux. J'ai utilisé redux plusieurs fois avec react-dom et je n'ai jamais eu de problèmes. Maintenant, avec react-native, je ne peux pas le faire fonctionner.

J'ai lancé une application standard très simple, mais lorsque j'ajoute le connect HOC à mon composant, j'obtiens l'erreur suivante: p >

 entrez la description de l'image ici

Voici le code de mon composant:

"react": "16.6.3",
"react-native": "0.57.4",
"react-redux": "^7.0.2",
"redux": "^4.0.1"

Depuis la console. log Je peux voir que le connect hoc renvoie effectivement un objet, pas un composant:

 entrez la description de l'image ici

J'ai créé mon projet en utilisant react-native-create-app et voici mes dépendances:

import React, { Component } from 'react';
import { Provider } from 'react-redux';
import { createStore, combineReducers } from 'redux';
import { connect } from 'react-redux';
import { View } from 'react-native';

const mainReducer = (state = { msg: 'Hello World!' }, action) => {
    switch(action.type) {
        default: return state;
    }
};

const store = createStore(combineReducers({ mainReducer }));

class Main extends Component {
    render() {
        console.log('props: ', this.props);
        return (
            <View>{this.props.msg}</View>
        );
    }
}

const MainWithRedux = connect(state => ({ msg: state.msg }))(Main);
console.log('MainWithRedux: ', MainWithRedux);

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

Est-ce que je manque quelque chose? Comment puis-je intégrer correctement react-redux avec react-native?


0 commentaires

3 Réponses :


0
votes

Lorsque vous utilisez connect, vous ne spécifiez pas de réducteur à partir duquel vous devez importer "msg".

const MainWithRedux = connect(state => ({ msg: state.mainReducer.msg }))(Main);

Cela peut peut-être résoudre votre problème.


0 commentaires

1
votes

Quiconque rencontre ce problème, je pense que cela se produit à cause des versions react-native et react-redux . Voir ceci pour un peu plus d'informations: https://github.com/reduxjs/react -redux / issues / 1274

J'ai eu cette erreur sur react-native@0.56.1 et react-redux@7.0.3 . Je ne suis actuellement pas en mesure de mettre à jour ma version react-native , donc je me suis retrouvé avec la rétrogradation de ma version react-redux . Je l'ai rétrogradé à react-redux@5.0.6 et tout semble fonctionner maintenant.


0 commentaires

0
votes

Jeter ça juste au cas où, parce que j'ai moi-même lutté contre cette erreur très cryptique. J'ai fini par découvrir que j'avais importé Provider de react-navigation au lieu de react-redux.


0 commentaires