redux状态更新不正确

时间:2016-12-28 08:03:51

标签: reactjs redux

我试图用一个例子研究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中做一些事情,但仅仅是为了学习目的。!

高级感谢帮助者! 欢呼声。

2 个答案:

答案 0 :(得分:1)

animalReducerarchitectureReducer中,您需要在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));
    }
}
  1. 在默认情况下,Reducer未返回原始状态

  2. 默认状态格式和组合的reducer状态格式不同