2015-09-03 13 views
5

Nel mio componente ho il seguente:Come si deve gestire l'annullamento dell'iscrizione in un componente che reagisce quando si usa Redux?

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

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

Non chiamando unsubscribe causa il seguente errore:

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.

Quello che mi piacerebbe sapere è dovrei assegnando unsubscribe a this o c'è un posto migliore per assegnarlo?

+0

Dovresti provare in componentDidMount() invece di componentWillMount(). – legolandbridge

+0

@legolandbridge che non fa alcuna differenza visto che devo ancora "annullare l'iscrizione". – Clarkie

+0

Hai esaminato l'uso di 'react-redux'' 'connect' e' Provider'? –

risposta

4

Come menzionato da Salehen Rahman sopra nei commenti, ho terminato utilizzando react-redux.

A seguito della loro documentazione che ho creato due funzioni, una per mappare la 'stato globale' per gli oggetti di scena all'interno del componente:

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

e uno per mappare le azioni che vengono consegnati a funzioni passati nel componente come oggetti di scena:

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)) 
    }; 
} 

Questo poi tutto viene tirato insieme con il metodo connect:

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

Ho la sensazione che tutto questo funzioni sotto il cofano sia collegato al metodo unsubscribe al componente, ma semplifica notevolmente le cose.

+1

Sotto il cofano annette infatti "cancella l'iscrizione" a "questo", ma non il vostro componente. Reagire Redux 'connect()' genera un componente intermedio: ecco perché si ricevono dati come 'this.props', e non come' this.state'. Probabilmente dovresti usare React Redux nella maggior parte dei casi invece di arrotolarlo manualmente perché ha determinate ottimizzazioni delle prestazioni. –

Problemi correlati