2017-08-14 57 views
1

我有我的初始状态:添加对象初始状态减速

export default function DrinkCalculator(state = initialState, action) { 

    let payload = action.payload; 
    switch (action.type) { 
    case UPDATE_DRINKS_CALCULATOR: 
    return [{ 
     ...state, 
     ...payload 
    }]; 
case ADD_DRINK: 
    let newState= [Object.assign({},state)]; 
newState.push(action.payload); 
return newState; 

我如何添加到我的数组来保存对象的数组?我怎么会需要改变我的reducer来添加一个对象到一个数组,所以我可以存储大量的条目,而不仅仅是一个。

我想我的状态是:

[{ 
    drinkType: 5, 
    drinkVolume: 4, 
    drinkStrength: 5, 
    drinkQuantity: 5, 
    drinkStength: 5 
}, 
{ 
    drinkType: 1, 
    drinkVolume: 2, 
    drinkStrength: 2, 
    drinkQuantity: 5, 
    drinkStength: 7 
}, 
{ 
    drinkType: 3, 
    drinkVolume: 5, 
    drinkStrength: 2, 
    drinkQuantity: 5, 
    drinkStength: 5 
}, 
{ 
    drinkType: 5, 
    drinkVolume: 5, 
    drinkStrength: 5, 
    drinkQuantity: 5, 
    drinkStength: 5 
} 
] 

更新:我正在复制到我的状态嵌套的对象,我想获得顶级性能,并将其添加为对象的数组。

当我火了这里的行动:

onClick() { 
const drinkQuantity = this.state.counter; 

const drinks = this.props.DrinksCalculator; 

if (!drinkQuantity) { 
    this.props.dispatch(showError()); 
} else { 
    this.props.dispatch(updateDrinksCalculator({drinkQuantity})); 
// fire addDrink to copy drinks props in new object 
    this.props.dispatch(addDrink(drinks)); 

    this.props.router.push('/calc/5'); 
} 
} 

enter image description here

+1

的'initialState'不应该改变,如果需要不同的结构,那么通过默认或用途变化'initialState'到阵列结构一个不同的减速器。 – Purgatory

+0

我的意思是默认情况下,更新后的问题 – Bomber

+1

'action.payload'的值是'[{1:2,1:2},{1:2,1:2,},{1:2,1:2 },{1:2,1:2}]'?如果是这样,那么你应该'返回[...状态,... action.payload]' – Purgatory

回答

0

如果我理解你的权利,你想一个新的属性添加到您的状态。

const initialState = { 
    drinkType: null, 
    drinkVolume: null, 
    drinkStrength: null, 
    drinkQuantity: null, 
    drinkStength: null 
}; 
const someReducer=(state=initialState,action) => { 
    switch (action.type) { 
    case "SOME_ACTION":{ 
    let newState= Object.assign({},state,{newAttribute:["value1","value2"]}); 
    return newState; 
    } 
} 

这将创建一个状态,该状态具有newAttribute属性。

我个人喜欢列出我要在initialState中使用的所有属性。人们可以更容易地阅读代码,了解他们将要使用的属性以及其中的数据。

推动一个对象到一个数组的另一个例子

dispatch({ 
    type:"ADD_QUESTIONS", 
    question:{ 
    drinkType: 5, 
    drinkVolume: 4, 
    drinkStrength: 5, 
    drinkQuantity: 5, 
    drinkStength: 5 
    } 
}) 

const initialState = { 
    questions:[] 
}; 

const someReducer=(state=initialState,action) => { 
    switch (action.type) { 
    case "ADD_QUESTIONS":{ 
    let newState= Object.assign({},state); 
    newState.questions.push(action.question); 
    return newState; 
    } 
} 
+0

谢谢,我已经更新了我的答案,我需要一个对象数组,所以我可以将它们映射到一个表并显示数据。 – Bomber

+0

您是否多次调用aysnc函数,并且每次要将其添加到reducer中的对象列表中? –

+0

我有一个reducer维护点击通过问号的状态,当它完成它将完成的状态推入一个数组。 – Bomber