2017-11-18 6 views
1

私の目標は、マップされた配列の要素をreduxオブジェクトに追加することです。例:Reduxは状態オブジェクトを操作します

const initialState = { 
    students: [] 
} 
const students = (state = initialState, action) => { 
    switch (action.type) { 
    case 'ALL_STUDENTS': 
     return Object.assign({}, state, { 
     students: action.students 
     }) 
    } 
} 

私の目標は、そのように見えるデータである:

[ 
    {someprop: "", student: {id: "1", name: "Anie"}}, 
    {someprop: "", student: {id: "2", name: "John"}} 
] 

私は小道具としてユーザーオブジェクトを追加する必要がある学生の リストは、私が持っているReduxので

[ 
    {id: "1", name: "Anie"}, 
    {id: "2", name: "John"} 
] 

をJSON Object内のpersonオブジェクトの割り当て。そんなことがあるものか。それを行う最も正しい方法はどれですか?

+0

現在、あなたは学生のための1つの減速を持っています。あなたは人のためにもう一つの減量をしたいですか? – AranS

+0

不要人物配列はありません。学生の配列を変更するだけです – TeodorKolev

+0

学生の場合は、学生オブジェクトに「student」プロパティは必要ありません。あなたはあなたのデータセットを過度に複雑にしていると思います。 – Andy

答えて

3

生徒のリストにmap()メソッドを使用すると、内部の各オブジェクトに新しいプロパティを追加し、オブジェクトと配列のspread構文を使用して新しいプロパティを追加できます。

const initialState = { 
 
    students: [] 
 
} 
 
const students = (state = initialState, action) => { 
 
    switch (action.type) { 
 
    case 'ALL_STUDENTS': 
 
     return { 
 
     ...state, 
 
     students: [...action.payload.map(student => { 
 
      return {someprop: '', student} 
 
     })] 
 
     } 
 
      
 
    default: 
 
     return state; 
 
    } 
 
} 
 

 
var newStudents = { 
 
    type: 'ALL_STUDENTS', 
 
    payload: [{id: "1", name: "Anie"},{id: "2", name: "John"}] 
 
} 
 

 
let state = students(undefined, newStudents); 
 
console.log(state)

+0

初期状態として '[]'を使用しない理由はわかりませんが、あなたがすでにその配列に生徒を持っているならば、それらを '... state.students'に広げる必要がありますこのようにhttps://jsfiddle.net/Lg0wyt9u/2497/ –

+0

私はエラーが発生しました...状態、 – TeodorKolev

+0

Nenadこれは私がjsonからフェッチする場所であるため、初期状態[]を持っています – TeodorKolev

関連する問題