【发布时间】:2016-03-09 23:07:25
【问题描述】:
我已经将一些逻辑放入减速器中,我认为应该将其放入 Action 并传递下去?
将这类东西放在 action 或 reducer 中是最佳做法吗?
工作示例here。
减速机代码:
function Card() {
this.card = (Math.random()*4).toFixed(0);
}
Card.prototype = {
getRandom: function(){
var card;
//console.log(this.card)
switch (this.card) {
case '1':
card = 'heart';
break;
case '2':
//card = 'diamonds';
card = 'heart'; // weight the odds abit
break;
case '3':
card = 'club';
break;
case '4':
card = 'spade';
break;
default:
card = 'heart';
break;
}
return card;
}
}
var dealer = {
deal: function(){
var results = [];
for(var i = 0; i <4; i++){
var card = new Card();
results.push(card.getRandom());
}
console.log(results);
return results;
}
}
const initialState = {
count: 0,
data: []
}
function counter (state = initialState, action) {
let count = state.count
switch (action.type) {
case 'increase':
return Object.assign({}, state, {
data: dealer.deal(),
count: state.count+1
})
default:
return state
}
}
【问题讨论】:
-
Reducer 应该包含改变状态的逻辑,但最好不要将其写在 switch 语句中,而是将逻辑提取到一个单独的函数中,传递当前状态并返回新状态。一个很棒的教程:teropa.info/blog/2015/09/10/…
-
"Reducer 应该包含改变状态的逻辑" ?
-
reducer 应该包含所有改变给定状态的逻辑。但最好的做法是提取此逻辑以分隔函数,而不是在 case 语句之间内联编写它,例如:
return addUsers(currentState, action) -> newState
标签: javascript reactjs redux