2016-04-14 33 views
3

arbeiten Ich versuche in meinem codepen Stift zu verwenden Reagieren + Redux, aber die connect ist die Stütze nicht InjizierenReagieren-Redux connect nicht

Vielleicht ist es, weil ein Amateur zu sein, ich bin etwas fehlt. Bitte guck dir das an. http://codepen.io/sahil28v/pen/EKEKME?editors=0010

const { Component } = React; 
const { createStore, bindActionCreators, applyMiddleWare, combineReducers } =  Redux; 
const { Provider, connect } = ReactRedux; 

const Application =() => (
     <div className="ground"> 
    <Tmap /> 
     </div> 
    ); 

class Tmap extends Component { 
    constructor(props){ 
    super(props); 
    console.log(this.props.mapstate); // This is returning undefined,no idea why 
    console.log(store.getState().mapstate); // Though this returns val: "hey" as it should properly though. 
} 
render() { 
    return (
    <div> 

    </div> 
); 
} 
} 

const mapStateToProps = (state) => ({ 
mapstate: state.mapstate 
}); 

connect(mapStateToProps)(Tmap); 

const initialState = { 
    val: "hey" 
} 

const mapReducer = (state = initialState, action) => { 
return state ; 
} ; 

const rootReducer = combineReducers({ 
    mapstate: mapReducer, 
}); 

const store = createStore(rootReducer); 

React.render(
    <Provider store={store}> 
     <Application /> 
    </Provider>, document.getElementById('app') 
); 

Auch ,,, kann ich Speicher konfigurieren hier in codepen selbst für redux devtools (Chrome-Erweiterung) verwenden. Ich habe versucht, hinzuzufügen ... window.devToolsExtension? window.devToolsExtension(): f => f, um den Speicher zu erstellen, aber das funktioniert nicht.

Während jemand antwortet - können Sie auch eine gute Dokumentation/Video für empfehlen: -> ES6 Lernen ...

- Danke für die Hilfe

Antwort

3

Connect gibt eine neue Instanz der Komponente Ich nehme an. Dies funktioniert, indem Sie connect als Dekorateur verwenden.

@connect(
    state => ({ 
    mapstate: state.mapstate 
    }) 
) 
class Tmap extends Component { 
    constructor(props){ 
    super(props); 
    alert(this.props.mapstate); // This is returning undefined,no idea why 
    alert(store.getState().mapstate); //As I understand this is the direct low level api which connect is meant to abstract away along with store.subscribe. 
    } 

    render() { 
    return (
    <div> 
    </div> 
    ); 
    } 
} 
+0

Hey danke für die Antwort, Ja, es hat bringt den Zustand, in als Stütze aber, dass ich @connect (...) vor jeder Klasse hinzuzufügen bedeutet bräuchten & würde es Änderungen abonnieren speichern ?. Wie würde ein mapDispatchToProps in diesem Fall funktionieren. Ist auch nicht das react-redux.min.js Job -> Es scheint in der lokalen Umgebung gut zu funktionieren. Es muss etwas geben, das ich vermisse, das es nicht klickt. – user4076248

+0

Technisch ja. Aber Sie würden lieber ein paar Container-Komponenten "verbinden". 'connect' nimmt' mapStateToProps' und 'mapDispatchToProps', dann können Sie es so verwenden '@connect (state => ({...}), dispatch => ({addTodo: (value) => dispatch (addTodo (Wert))})) und beschreiben Sie in einer 'actions'-Datei die Funktion' addTodo': const addTodo = value => dispatch (...). (Entschuldigung für die Einrückung) –

+0

Ich bin glücklich, Ihre Antwort zu akzeptieren, da das Hinzufügen von connect als Dekorateur tatsächlich den Status als Prop injiziert, was das Problem war, mit dem ich begann, als ich postete. Obwohl ich immer noch gespannt bin, warum die Verbindung (mapStateToProps) (ComponentName) nicht funktionierte, als ich die react-redux.min.js importierte. Bitte teilen Sie Ihre Meinung, warum es nicht funktioniert hat, wenn Sie können. Nochmals vielen Dank für die Hilfe. – user4076248

3

Sie haben vergessen, das Ergebnis von connect in eine neue Variable zu speichern. Und diese neue Variable sollten Sie anstelle von Tmap verwenden.

const CTmap = connect(... 
.... 
<CTmap/> 
+0

- hallo Leif, danke dafür, aber ich realisierte früher nach Guillaumes Antwort :). Gute Sache, aber ich habe über @ Symbol und seine Verwendung erfahren. – user4076248

+0

Ah ja, ... Jetzt sehe ich deinen Kommentar. –