2017-03-06 1 views
1

이것은 내 감속기입니다. ID를 기반으로 중복되지 않고 감속기의 데이터를 업데이트하고 싶습니다.반응에서 감속기 상태의 데이터를 업데이트하는 방법

아무도 도와 줄 수 있습니까? 내가 ID를 삭제할

export const dataReducer = (state= InitialState , action = null) => { 
    switch(action.type) { 
    case types.UPDATE_DATA: 
     return Object.assign({}, state, { 
    data: [ 
     ...(state.data.filter(item => (item.id !== action.payload.id))), 
     action.payload 
    ] 
    default: 
     return state; 
    } 
} 

: 2과 국가에 새로운 데이터를 추가 할

이 내 코드입니다. 그것은으로 업데이트해야합니다

var state = { 
    data: [ 
    {id: 1, data: "Hello"}, {id: 2, data: "World"} 
    ] 
} 
var payload= {id:2, data: "SO"} 
var data1 = state.data.map(function(item){return (item.id == payload.id)? payload: item}) 

var data = {...state, 
       data: data1 
      } 
console.log(data); 

,

var state = { 
    data: [ 
    {id: 1, data: "Hello"}, {id: 3, data: "Value"} 
    ] 
} 
+0

, 내가 ID를 기반으로 데이터를 덮어 쓰려면 지금의이 생긴하고 일을 당신이 –

+0

을 기대할 내 감속기 상태로 일부 데이터를 가지고있다. –

+1

데이터의 모양을 게시 할 수 있습니까? 또는 id-s가 그 안에 어떻게 배치되어 있는가? – Shota

답변

3

이 데이터를 업데이트합니다. array 내의 object와 일치하는 경우.

이전에 삭제하고 새 데이터를 추가하려는 경우 한 번 시도해 볼 수 있습니다.

export const dataReducer = (state= InitialState , action = null) => { 
     switch(action.type) { 
     case types.UPDATE_DATA: 
      return Object.assign({}, state, { 
       data: state.data.filter(item => { 
        return item.id !== action.id; //delete matched data 
       }).concat(action.payload); //concats new data 
      }); 
     default: 
      return state; 
     } 
    } 
+0

아니오 그것의 작동하지 않는다 –

+0

이것은 기본적으로 일치하는 경우 페이로드로 항목을 대체하는 것을 의미합니다. – duwalanise

+0

작동 중입니다. 하지만 문제는, 만약 내가 첫 번째 id를 업데이트했다면, 두 번째 id는 첫 번째 인덱스 place로 가고, 세 번째 id는 두 번째 인덱스 place로 갈 것입니다. 첫 번째 데이터를 업데이트하는 경우 첫 번째 인덱스를 대체해야합니다. –

0

그럼 당신이 솔루션을 사용하면 데이터 객체의 구성 방식에 따라 달라집니다. 데이터 객체가 아래 예제와 같이 주어진다면 스프레드 연산자 구문과 맵을 사용하면 잘 작동합니다.

var state = { 
 
    data: [ 
 
    {id: 1, data: "Hello"}, {id: 2, data: "World"} 
 
    ] 
 
} 
 
var payload= {id:2, data: "SO"} 
 
var data1 = state.data.map(function(item){return (item.id == payload.id)? payload: item}) 
 

 
var data = {...state, 
 
       data: data1 
 
      } 
 
console.log(data); 
 
    

코드는

export const dataReducer = (state= InitialState , action = null) => { 
    switch(action.type) { 
    case types.UPDATE_DATA: 
     var temp = state.data.map(function(item){return (item.id == action.payload.id)? action.payload: item}) 
     return {...state, 
      data: temp 
     } 
    default: 
     return state; 
    } 
} 
+0

없음의 –

+0

작동하지 않음 하지만, 이전 데이터를 삭제하고 새 데이터를 추가하고 싶습니다. av37을 참조하십시오. –

+0

어디에서 삭제해야 할 ID가 지정되어 있습니까 –

관련 문제