2016-03-09 44 views
3

我正在使用REDX做待辦事項列表,並且我想爲每個待辦事項添加子待辦事項列表,但我無法理解爲什麼我的縮減器行無法正常工作(請參閱上述內容) 您能請幫幫我 ?Redux待辦事項列表高級

import { combineReducers } from 'redux' 
import { ADD_TODO, TOGGLE_TODO, ADD_SUB_TODO} from '../constants/ActionTypes' 
import _ from 'lodash' 

const initialState = { 
    todos : [] 
} 

export function todo(state, action) { 
    switch (action.type) { 
     case ADD_TODO: 
      return { 
       id: action.id, 
       text: action.text, 
       completed: false 
      }; 
     default: 
      return state; 
    } 
} 


export function allTodo (state = initialState, action) { 
    switch (action.type) { 
     case ADD_TODO: 
      return { 
       ...state, 
       todos: [ 
        ...state.todos, 
        { 
         id: action.id, 
         text: action.text, 
         completed: false, 
         subtodo:[] 
        } 
       ] 
      }; 
     case ADD_SUB_TODO: 
      console.log("REDUCER") 
      console.log(...state.todos) 
      return { 
       ...state, 
     // THIS LINE DOES'NT WORK : 
       ...state.todos[0].subtodo: [ ...state.todos[0].subtodo, { 
        id: action.id, 
        text: action.text 
       }] 
      }; 
     default: 
      return state; 
    } 
}; 

export default combineReducers({ 
    allTodo 
}) 

此行不工作:

...state.todos[0].subtodo: [ ...state.todos[0].subtodo, { 
         id: action.id, 
         text: action.text 
        }] 

,這是我的子ToDo對象:

{ 
id: action.id, 
text: action.text 
} 
+0

怎麼辦你期望'state.todos [0] .subtodo'永遠是subtodo的正確位置嗎?是否只能在第一個待辦事項中添加一個子服務? – naomik

+0

我爲我的測試放了一個0我會在將要解決此問題之後放置父級待辦事項的ID,當創建待辦事項時,創建子對話框時會出現子對話框的丟失情況ADD_TODO – fandro

回答

2

假設action.parent包含父待辦事項的指數,試試這個。

 
     case ADD_SUB_TODO: 
      let subtodo = {id: action.id, text: action.text} 
      let subtodos = [...state.todos[action.parent].subtodo, subtodo] 
      let todo = _.assign({}, state.todos[action.parent], {subtodo: subtodos}) 
      return _.assign({}, state, {todos: [...state.todos, todo]}) 
如果你想與一個待辦事項,你在你的問題有辦法試試這個

 
     case ADD_SUB_TODO: 
      let subtodo = {id: action.id, text: action.text} 
      let todo = _.assign({}. state.todos[0], {subtodo: [subtodo]}) 
      return _.assign({}, state, {todos: [...state.todos, todo]}) 
+0

非常感謝!它不完全是,但隨着它,我解決了這個問題:) – fandro

+0

我很好奇,什麼是實際問題? –

+0

我發佈我的解決方案作爲答案,你可以看到它:) – fandro

1

感謝瘋狂袋熊,這是最終代碼:

case ADD_SUB_TODO: 

       let subtodo = {id: action.id, text: action.text} 
       let subtodoList = _.concat(...state.todos[action.parentId].subtodo, subtodo) 
       let todo = _.assign({}, state.todos[action.parentId], {subtodo: subtodoList}) 

       return { 
        ...state, 
        ...state.todos[action.parentId] = todo, 
        todos: [ 
         ...state.todos 
        ] 
       }; 
+0

這看起來很奇怪的幾個地方,但如果它適合你,一切都很好 –