为什么我的Container组件从其他reducer获取状态对象?

时间:2017-12-15 07:10:18

标签: javascript reactjs redux

我的应用中有两个容器组件。我刚开始做出反应,redux并认为容器组件从其各自的reducer中获取状态对象,以便它可以映射到组件的道具。

我控制台记录了reducer发送的状态,并看到状态对象包含我的应用程序中另一个reducer发送的数据。我认为它应该只从相应的reducer获取数据,因为reducer是将数据发送到容器组件的。

我不知道自己做错了什么或是否有问题。

减速器:

    export default function(state=null, action){
    console.log(action);
    switch(action.type){
        case 'BOOK_SELECTED':
            return action.payload
    }
    return state;
}

容器组件:

    function mapStateToProps(state){
     console.log("state from reducer",state); //contains data from the other reducer as well
    return {
        bookDetail : state.bookDetail
    }
}

export default connect(mapStateToProps)(BookDetail);

2 个答案:

答案 0 :(得分:1)

容器和减速器没有连接"。这就是mapStateToProps存在的原因。

Redux不知道容器所需的状态部分,因此,在mapStateToProps中,提供了所有状态,并且每个状态都需要它。在您的情况下,您的容器需要state.bookDetail

希望它有所帮助。

答案 1 :(得分:0)

如果查看react-redux文档,您会看到mapStateToProps收到完整商店数据作为第一个参数。正如你所做的那样,将它切换到连接组件所需的道具是你的工作。您的组件只会从州获得bookDetail作为道具。

所以你的代码很好,虽然我会用default clause在reducer中重写那个switch语句。