我试图用一个例子研究redux流程。但是卡在两者之间。以下是相同的plunkr链接。
function combineReducers(currentState, action) {
var nextState = Object.assign({}, currentState);
/*On load placeholder details for all thumbnails*/
var placeholder = {
urlPath: "http://placehold.it/640x480",
header: "PLACEHOLDER",
description: "Description text for the above image"
};
if (currentState === undefined) {
nextState = placeholder;
return nextState;
}
//Problem here i guess
nextState = {
animals : animalReducer(nextState.animals, action),
architecture : architectureReducer(nextState.architecture, action)
}
return nextState;
}
应用程序加载初始状态,将所有媒体元素设置为占位符。 (那很有效) 在单个按钮单击时,它应该获取每个类别的详细信息,并仅填充这些媒体元素。
问题:
当我单击Go按钮时,1和2元素都在更新 一起。理想情况下,我希望只获得动物细节 点击元素1,元素2的建筑细节,3和3的自然 4人。
我没有实现3和4,因为我确信如果这样做,那么它将更多地只是为每个州添加额外的动作和缩减器。
我认为问题在于rootReducer.js第19行,或者index.js,第34行或第37行,但不知道如何继续!任何指针都会有很大的帮助!我今天已经在头上拔掉了很多头发!
PS:我知道在jquery中做一些事情,但仅仅是为了学习目的。!
高级感谢帮助者! 欢呼声。
答案 0 :(得分:1)
在animalReducer
和architectureReducer
中,您需要在currentState
案例中返回default:
,否则您每次{另一部分} null
一些变化。 nextState
中未定义default:
。
默认情况下,reducer对状态没有任何作用,必须保持不变。只有存在匹配操作时,才应创建具有更新状态的新对象。这里的问题是你不遵守该规则,并且偶然会默认状态为空状态。
答案 1 :(得分:1)
https://plnkr.co/edit/WDyQHy5tftm2EX6AFQ9j?p=preview
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
在默认情况下,Reducer未返回原始状态
默认状态格式和组合的reducer状态格式不同