2016-03-21 18 views
2

Şu anda iki bileşenim var (bir kapsayıcı bileşen ve bir sunum). componentDidMount ve componentWillReceiveProps yaşam döngüsü yöntemlerinde uygulanması gereken bazı mantık var, özellikle orada bazı eylemleri göndermek zorundayım.Redux. Sunum bileşeninin yaşam döngüsü yöntemlerini bir kapsayıcı bileşeninden tanımlayın.

Şu anda, bir mapDispatchToLinkProps fonksiyonunda bu eylem yaratıcıları haritalama ve connect fonksiyonu ile benim sunum bileşenin props onları geçmek ve daha sonra, ben componentDidMount ve componentWillReceiveProps yöntemlerde diyoruz ediyorum. İşte ben bunu uyguladık nasıl:

Konteyner bileşeni:

const mapDispatchToLinkProps = (dispatch, ownProps) => { 
    return { 
    onMount:() => { 
     dispatch(loadRooms(ownProps.floor)) 
    }, 
    onPropsReception: (nextProps, currentProps) => { 
     if (nextProps.floor != currentProps.floor) { 
     dispatch(loadRooms(nextProps.floor)) 
     } 
    } 
    } 
} 

Sunumla bileşen:

export default connect(mapStateToProps, mapDispatchToLinkProps)(MapLayer): 

componentDidMount() { 
    this.props.onMount() 
} 

componentWillReceiveProps(nextProps) { 
    this.props.onPropsReception(nextProps, this.props) 
} 

render() { 
// ... 
} 

Burada sevmiyorum şey olduğunu ben bağlamı böyle bir şekilde kaybediyorum veyönteminin ikinci bir bağımsız değişken olarak this.props geçirmesi gerekiyor:

this.props.onPropsReception(nextProps, this.props) 

Sunum bileşeninin yaşam döngüsü yöntemlerini bir kapsayıcı bileşeninden tanımlamanın, ancak sunum bileşeninin içeriğini koruyabilmenin bir yolu var mı? Ya da daha da iyisi, yaşam döngüsü yöntemlerini sunum bileşeni dahilinde herhangi bir çağrı olmadan geçersiz kılmak mı? ben henüz bir yorum,

Neden presentational bileşen & gerekli kontroller sadece sağ parametreleri içeren sonradan bir çağrı yapacağım değil ekleyemezsiniz

+1

Bunu çözebildiniz mi? Benzer problemim var. Reaktif yönlendirici kullanıyorum ve redux. URL sorgu parametrelerini yakalarım (/ search? Q = 'foo' & page = 1). url parametresi değiştiğinde componentWillUpdate yaşam döngüsü yöntemi çağrılır. Bağlantı yöntemini kullanarak yaşam döngüsü bileşenini geçmenin yolunu bilmiyorum. Veya mapStateToProp'u React.createClass bileşenine nasıl geçirirsem. –

+0

Üzgünüz, buraya dönme vaktim olmadı, sorun çözülmedi. –

cevap

0

Maalesef?

örn:

componentWillReceiveProps(nextProps) { 
    if (this.props.floor != nextProps.floor) { 
    this.props.loadRooms(nextProps.floor); 
    } 
} 

ContainerComponent:

const mapDispatchToLinkProps = (dispatch, ownProps) => { 
    return { 
    onMount:() => { 
     dispatch(loadRooms(ownProps.floor)) 
    }, 
    loadRooms: (floor) => { 
     dispatch(loadRooms(floor)); 
    } 
    } 
} 

Ne soruyorsun bazı kesmek ile yapılabilir, ancak tepki & redux felsefesi aykırı.

+0

Cevabınız için teşekkürler, ama sanmıyorum. Bu doğrulamayı yapmak: “if (this.props.floor! = NextProps.floor)” sunum bileşeninde bir tür veri davranışı uyguluyorum, ancak burada yapılmamalı. Şimdi 'connect' yönteminde' mergeProps' argümanına bakıyorum. Dan Abramov burada nasıl kullanılacağı hakkında çok iyi bir açıklama yaptı: https://github.com/reactjs/react-redux/issues/237#issuecomment-168816713 Yine de cevabınız için teşekkürler! –

İlgili konular