2016-12-09 6 views
2

** Updatemeinen Kopf Schwierigkeiten Umwickeln mit Redux Staaten Mit Reagieren

ich das Reduktions aktualisiert haben zu sein:

const initialState = { 
step: 1, 
indibiz: "individual", 
firstName:"first", 
lastName: "last", 
email: "email", 
choice: "null", 
emailNews: "no", 
dob: "1", 
mobileNumber: "1234567890", 
island: "St. Lucia", 
industry: "Astronaut", 
Skill: "Space Monkey", 
createClick: false 
} 
export default function (state = initialState, action) { 
switch (action.type) { 
case "SELECT_BUSINESS": 
    console.log(state); 
    return { ...state, indibiz: action.payloadEvent } 
    break; 

} 
return state; 
} 

Jetzt in meinem console.log folgende ich sehe, dass es die Protokollierung ist das Objekt aus dem Ausgangszustand. Aber wenn ich versuche und protokolliere die folgenden in der gleichen Komponente: {console.log (this.props.selectindibusi.indibiz)} Dann gibt es undefined zurück. Soll es nicht den initialValue haben, der im Reducer eingestellt ist?

** Update über

Ich reagiere bin mit und zur Zeit Redux versuchen zu lernen und es in einem Projekt verwenden zu verwenden, ich tue. Das Problem ist, dass ich fühle, dass ich Reduzierer nicht vollständig verstehe. Unter meinem Reduktionsindex ist:

import {combineReducers} from 'redux'; 
import signupState from './reducer-signup.js'; 
import TestReducer from './testalertreducer.js'; 
import Selectindibusi from './reducer-select_indy_biz.js'; 

const allReducers = combineReducers({ 
    signupState: signupState, 
    selectindibusi: Selectindibusi, 
}); 

In meinem signupState Minderer habe ich:

export default function() { 
    return ({ 
    step: 1, 
    indibiz: "individual", 
    firstName:"first", 
    lastName: "last", 
    email: "email", 
    choice: "null", 
    emailNews: "no", 
    dob: "1", 
    mobileNumber: "1234567890", 
    island: "St. Lucia", 
    industry: "Astronaut", 
    Skill: "Space Monkey", 
    createClick: false 
    }); 
} 

Unterhalb der Aktion ist:

export function selectindibusi(signupState, event) { 
    const SELECT_BUSINESS = "random string"; 
    console.log(signupState); 

    return { 
    type: "SELECT_BUSINESS", 
    payloadState: signupState, 
    payloadEvent: event.target.value 
    }; 
} 

Und unten ist die Minderer, der für diese Aktion hört :

export default function (state = [], action) { 
    switch (action.type) { 
    case "SELECT_BUSINESS": 
    console.log(state); 

    return { ...state, indibiz: action.payloadEvent } 
    break;  
    } 

    return state; 
} 

Ich bin caling diese Aktion in einer onChange Aktion auf einem Drop-Down, die wie folgt aussieht: kann ich

   <select className="formSelector100" onChange={this.props.selectindibusi.bind(this,this.props.signupState)}> 
       <option value="individual">Individual</option> 
       <option value="business">Business</option> 
       </select></label> 

In der Aktion übergeben die Daten ConsoleLog werden. Das Problem besteht darin, dass die Daten im SignupState Reducer nicht aktualisiert werden oder ein neues Objekt erstellt wird, auf das ich zugreifen kann.

Auf meiner Komponente, wenn ich versuche, {this.props.signupState.indibiz} anzuzeigen, ist der Wert der gleiche wie der Standardwert im Reducer, er wird nicht aktualisiert. Ich fühle mich als würde ich hier etwas Grundlegendes vermissen und ich würde jede Hilfe zu schätzen wissen.

+0

wird 'console.log (state);' tatsächlich in Ihrem Reduzierer ausgelöst, wenn Sie onChange durchführen? – finalfreq

+0

Ja, unten ist die Antwort: reducer-select_indy_biz.js: 15 [] Länge: 0__proto__: Array [0] – futuregerald

+0

@Leigh danke ich selbst habe versucht, die Frage zu beantworten. Ich konnte das Snippet wegen der Formatierung nicht verstehen. werde versuchen, vorsichtig zu sein –

Antwort

3

Nach Ihrer Antwort, wenn die Konsole Protokoll des Zustandes wird dann ein leeres Array zurückzukehr:

export default function() { 
    return ({ 
    step: 1, 
    indibiz: "individual", 
    firstName:"first", 
    lastName: "last", 
    email: "email", 
    choice: "null", 
    emailNews: "no", 
    dob: "1", 
    mobileNumber: "1234567890", 
    island: "St. Lucia", 
    industry: "Astronaut", 
    Skill: "Space Monkey", 
    createClick: false 
    }); 
} 

nicht als Zustand gesetzt wird. Wie sollten Sie

const initialState = { 
    step: 1, 
    indibiz: "individual", 
    firstName:"first", 
    lastName: "last", 
    email: "email", 
    choice: "null", 
    emailNews: "no", 
    dob: "1", 
    mobileNumber: "1234567890", 
    island: "St. Lucia", 
    industry: "Astronaut", 
    Skill: "Space Monkey", 
    createClick: false 
    } 

und dann

in Ihrem signupState Minderer tun dies
export default function (state = initialState, action) { 
    switch (action.type) { 
    case "SELECT_BUSINESS": 
     console.log(state); 
     return { ...state, indibiz: action.payloadEvent } 
    break;  
    } 

    return state; 
} 

ab jetzt, wie Sie es Setup Ihre Reduzierungen sind nicht daher den richtigen Anfangszustand empfängt, warum denkt, dass es Zustand ein leeres Array.

+0

Danke! aber sagst du, dass ich die signupState-Funktion nicht in die Rückgabe exportieren soll und stattdessen das ursprüngliche Zustandsobjekt in den Reducer gelegt habe? – futuregerald

+0

Wie wir es tun, wo ich bin, ist in der spezifischen Reducer-Datei, habe den initialState als eine Variable an der Spitze und dann unten, die die eigentlichen Reducer-Funktionen IE die Schalteranweisungen und entsprechende Reduzierer haben. Das '(state = initialState, action)' stellt nur sicher, dass beim erstmaligen Ausschalten alles zum richtigen Zeitpunkt den richtigen Status hat. – finalfreq

+0

Danke. Ich habe diese Veränderung vorgenommen. Aus irgendeinem Grund, wenn ich versuche, auf einen Wert von diesem Objekt zugreifen und Konsole log es ich nicht definiert. speziell versuchen zu loggen "console.log (this.props.selectindibusi.indibiz)" – futuregerald

Verwandte Themen