2017-02-06 57 views
3

该问题可能看起来多余,但在调用mapStateToProps后,组件似乎没有更新。下面是我在Home Component(类声明之外的ofc)中编写的一段代码。React Redux:连接到redux后组件未更新

function mapStateToProps(state) { 
    const { tickets } = state; 
    console.tron.log(tickets) 
    if(!tickets.isLoading) { 
    return { 
     loading: false, 
     ticketsModel: tickets.chunkedData 
    } 
    } 
    return { 
    loading: true 
    } 
} 
export default connect(mapStateToProps)(Home); 

一切工作正常,但对道具的更改不会触发组件中的更新。 PS:我检查是否有任何状态突变发生,但没有它din't。我喜欢重新

case RECEIVE_TICKETS : 
     return Object.assign({},state,{ 
     isLoading: false, 
     chunkedData: action.data.extractChunkedData(), 
     completeData: action.data.getCompleteData(), 
     }); 

A picture demonstrating the last Action Dispatch

编辑一个新的状态:该问题已排序。我傻了检查内部componentWillMount更新,而不是componentWillReceiveProps

+0

或许真的是不是就在你家的组成部分?你可以发布吗?你是说如果你把一个控制台登录到'render',它在状态改变后不会触发? – azium

+0

你能分享你的组件代码吗? –

+0

@azium确切地。我还没有完成我的组件代码。但是当状态改变时,componentWillUpdate应该被调用。这就是问题出现的地方。 –

回答

1

你可以写你mapStateToProps更简明,像这样:

function mapStateToProps(state) { 
    const { isLoading, chunkedData } = state.tickets; 
    return { 
    loading: isLoading, 
    ticketsModel: chunkedData 
    }; 
} 
export default connect(mapStateToProps)(Home); 

看着你mapStateToProps功能后,和终极版记录仪,你的问题是最有可能在组件本身。如果您要在组件中渲染this.props.loading,则应该看到true,然后再看到false

另外,我看到你的chunkedData数组没有初始状态。当您设置tickets对象的初始状态时,应将其设置为空数组。

所以首先你减速的几行应该是这样的:

const tickets = (
    state = { 
    isLoading: false, 
    chunkedData: [], 
    // Need more info to know what would go in this object 
    completeData: {} 
    }, 
    action 
) => { 

看看你是否可以看到道具的componentWillReceiveProps生命周期的方法来更改。你应该可以在接下来的练习中使用,只要道具改变就会改变。

了解更多关于这里的生命周期方法:http://busypeoples.github.io/post/react-component-lifecycle/