2017-11-15 7 views
0

私は反応ネイティブ(expo)イベントアプリで作業していますが、私のモックイベントのIDが更新されていて、それらがの整数の場合、IDがの場合この問題はありません。アレイ内のReduxアイテムのIDが更新されています

基本的な流れは、ユーザーがそのイベントを押すとそのイベントビューに表示されるイベントのリストを表示します。 eventInFocusevents * reducersを使用し、** eventViewコンテナに必要なイベントを見つけることでこれを行います。

特定のイベントを押すと、イベントIDはすべて更新され、以前の状態にすでにIDが混在しているため、デバッグが難しくなります。これは、アイテムのレンダリングに問題がないため非常に混乱します。ホームビュー(ループスルー配列、IDをキーとして使用) 最初のイベントを選択すると、イベントが見つからないというエラーが表示されます。他の2つのイベントを選択すると、イベントIDがランダムに更新されます。減速

イベント

const defaultEvents = [{ 
    id: 0, 
    name: 'my birthday', 
    date: new Date(), 
    repeatAnnually: false, 
    wallPaperSource: null 
    },{ 
    id: 1, 
    name: 'yosemite trip', 
    date: new Date(), 
    repeatAnnually: true, 
    wallPaperSource: null 
    }, { 
    id: 2, 
    name: 'trip to dublin', 
    date: new Date(), 
    repeatAnnually: false, 
    wallPaperSource: null 
}]; 

const event = (state, action) => { 
    switch (action.type) { 
    case EVENT_EDITED: 
     if(state.id !== action.event.id){ 
     return state; 
     } 
     return action.event; 
    default: 
     return state; 
    } 
} 

function events(state = defaultEvents, action){ 
    switch(action.type){ 
    case ADD_EVENT: 
     return [ 
     ...state, 
     { 
      id: action.event.id, 
      name: action.event.name, 
      date: action.event.date, 
      repeatAnnually: action.event.repeatAnnually, 
      wallPaperSource: action.event.wallPaperSource || null 
     }]; 
    case EVENT_EDITED: 
     return state.map(e => 
     event(e, action) 
    ) 
    default: 
     return state; 
    } 
} 

eventInFocusリデューサ

function eventInFocus(state = {}, action){ 
    switch(action.type){ 
    case "UPDATE_EVENT_IN_FOCUS": 
     return Object.assign({}, state, action.event); 
    case VIEW_EVENT: 
     return Object.assign({}, action.event); 
    default: 
     return state; 
    } 
} 

eventContainer - リストの各項目の周りのコンテナ(ホームビュー)

const mapStateToProps = (state, ownProps) => { 
    return { 
    ownProps 
    } 
} 

const mapDispatchToProps = (dispatch, ownProps) => { 
    return { 
    onPress: (event)=> { 
     dispatch(viewEvent(event)); 
    } 
    } 
} 

viewEventContainer - 単一のイベントビュー

const mapStateToProps = (state, ownProps) => { 
    const {events, eventInFocus } = state; 
    viewEvent = find(events, e => e.id = eventInFocus.id); 
    return { 
    event: viewEvent, 
    ownProps 
    } 
} 

const mapDispatchToProps = (dispatch, state) => { 
    return { 
    onEditEvent: (event) => { 
     dispatch(editEvent(event)); 
    } 
    } 
} 

const EventViewContainer = connect(
    mapStateToProps, 
    mapDispatchToProps 
)(EventView); 

viewEventアクション

export const viewEvent = (event) => { 
    return { 
    type: VIEW_EVENT, 
    event 
    } 
} 

ためには、私はReduxの約欠けている何かがありますか?私のレデューサーは構造が貧弱ですか?私にとって混乱する部分は、文字列ではなく整数でのみ起こる理由です。前もって感謝します!あなたは以前の状態がすでにここでイベント

答えて

1

ための突然変異したIDを持っていた見ることができるように、私は、イベントに押し

州はあなたのコードのバグを含む行です:

viewEvent = find(events, e => e.id = eventInFocus.id); 
           ^
            here 

あなたが見る通り、statemapStateToPropsのすべての呼び出しで突然変異しています。

関連する問題