2017-09-11 1 views
0

Ich habe ein Formular in React erstellt und ich habe eine API, die eine JSON-API-Struktur hat, d.h. mit der Antwort innerhalb der data: [] Eigenschaft. Und ich verwende Axios und redux-thunk, um die Daten zu holen.In React/Redux, wie Daten nach JSON API Struktur

Die Daten aus dem Formular kommenden state hat diese Struktur:

{ 
    title: '', 
    phone: '', 
    email: '', 
    description: '' 
} 

Wie kann ich es konvertieren, damit es die JSON API Konvention folgt, mit axios, redux-thunk, action und reducer:

{ 
    data: [{ 
    title: '', 
    phone: '', 
    email: '', 
    description: '' 
    }] 
} 

Hier stecke ich fest:

Redu cer:

export default function roleReducer(state = [], action) { 
    switch(action.type) { 
    case types.SAVE_ROLE_SUCCESS: 
     return [ 
     ...state, 
     Object.assign({}, action.role) 
     ]; 

    default: 
     return state; 
    } 
} 

Aktionen:

export function saveRoleSuccess(role) { 
    return { 
    type: types.SAVE_ROLE_SUCCESS, 
    role, 
    }; 
} 

Thunk:

export function saveRole(role) { 
    return (dispatch, getState) => { 
    return axios.post(apiUrl, role) 
     .then(savedRole => { 
     console.log('Role: ', savedRole); 
     dispatch(saveRoleSuccess(savedRole)); 
     console.log('Get state: ', getState()); 
     }) 
     .catch(error => { 
     if (error) { 
      console.log('Oops! Role not saved.', error); 
     } 
     }); 
    }; 
} 

Ich bin mir nicht sicher, wo und was für ein neue Daten in die JSON-Format zu tun API-Struktur

+0

Diese Frage ist sehr unklar. Fragen Sie, wie man ein Objekt in ein Array einfügt? '(obj) {return {Daten: [obj]}}' ?? – gravityplanx

+0

@gravityplanx, ja die Frage ist, wie kann ich meine Daten in die 'Daten' Array von JSON API hinzufügen? – Shaoz

+0

Was meinen Sie "von JSON API"? Die dumme kleine Funktion in meinem vorherigen Kommentar erstellt das einfache Objekt mit einer 'data: []' Eigenschaft ... ist das was du willst? – gravityplanx

Antwort

2

nicht 100% sicher, aber ich denke hier:

return axios.post(apiUrl) 

Sie sind tatsächlich keine Daten sendet. Ich denke, du willst es tun:

const dataToPost = { data: [ role ] }; //wrap the role in an array and an object 
return axios.post(apiUrl, dataToPost); //send the data 
+0

Danke für Ihre Antwort, ich habe meine Frage aktualisiert, indem ich die Daten im 2. Parameter von 'axios.post()' hinzugefügt habe. Befolgt Ihre Antwort die JSON-API-Struktur, wenn ich die Daten sende? – Shaoz

+0

Ich denke schon - probieren Sie es aus! –

+0

danke für deine Antworten. Es macht Sinn. Tut mir leid, ich war mir nicht sicher und ich kenne Axios und Thunk nicht. Aber nochmal danke. – Shaoz