2015-09-03 21 views
5

Ben şu var: this I unsubscribe atama edilmelidirRedux'u kullanırken abonelikten çıkma bir tepki bileşeninde nasıl ele alınmalıdır? Benim bileşeninde

Warning: setState(...): Can only update a mounted or mounting component. This usually means you called setState() on an unmounted component. This is a no-op.

Bilmek istiyorum ya vardır:

componentWillMount: function() { 
    this.unsubscribe = store.subscribe(function() { 
    this.setState({message: store.getState().authentication.message}); 
    }.bind(this)); 
}, 

componentWillUnmount: function() { 
    this.unsubscribe(); 
}, 

arayarak Değil abonelikten aşağıdaki hatayı neden olur atamak için daha iyi bir yer mi?

+0

componentWidMount() yerine componentDidMount() öğesini denemelisiniz. – legolandbridge

+0

@legolandbridge hala "aboneliği iptal etmem gerekiyor" diye bir fark yaratmıyor. – Clarkie

+0

'react-redux'un' connect' ve 'Provider' kullanmaya baktınız mı? –

cevap

4

react-redux kullanarak yaptığım yorumlardaki Salehen Rahman yorumlarında belirtildiği gibi.

function mapStateToProps(state) { 
    return { 
    users: state.users.items 
    }; 
} 

ve bir sahne olarak bileşen geçirilen işlevlerine sevk işlemleri eşleştirmek için: kendi belgelerine ardından

Ben iki işlevi, bir bileşen içindeki sahne için 'küresel devlet' eşleştirmek için oluşturuldu:

function mapDispatchToProps(dispatch) { 
    return { 
    lockUser: (id) => dispatch(actions.lockUser(id)), 
    unlockUser: (id) => dispatch(actions.unlockUser(id)), 
    updateUser: (id, user) => dispatch(actions.updateUser(id, user)), 
    addUser: (user) => dispatch(actions.addUser(user)) 
    }; 
} 

Bu, daha sonra tüm connect yöntemi kullanılarak birlikte çekilmiş olur:

export default connect(mapStateToProps, mapDispatchToProps)(UsersContainer); 

Kapağın altında tüm bunların unsubscribe yöntemini bileşene eklediği hissine sahibim, ancak işleri basitleştiriyor.

+1

Davlumbaz altında gerçekten de 'bu' aboneliği iptal et 'eklentisini ekler, ancak sizin bileşeninizi değil. React Redux 'connect()' bir ara bileşen oluşturur: bu nedenle, bu this page 'olarak değil, this.props olarak veri alırsınız. React Redux'u, çoğu durumda, belirli performans optimizasyonlarına sahip olduğu için elle çevirmek yerine kullanmalısınız. –

İlgili konular