2016-04-14 24 views
3

Bir üst bileşenim var: Previewer, bu iki çocuğu oluşturur. Kullanıcı SubtitleRow tıkladığındaReact.js: Aynı ebeveynin iki çocuğu arasındaki iletişim?

class Previewer extends Component { 
    render() { 
    return (
     <AudioPlayer /> 
     <SubtitleRow /> 
    ); 
    } 
} 

, bu geçmesi gerekir değişkenler, örneğin Ses çalmalıdır startTime ve EndTime, AudioPlayer için.

Ben official documentation okudum: Bir ebeveyn-çocuk ilişkisi olmayan iletişimi için

ikisi arasında bileşenleri, kendi küresel olay sistemini kurabilirsiniz. ComponentDidMount() içindeki etkinliklere abone olun, componentWillUnmount() öğesinde üyelikten çıkın ve bir olay aldığınızda setState() öğesini çağırın. Flux düzeni bunu düzenlemenin olası yollarından biridir.

Bence bir ilişkileri var (kardeşler), bu yüzden onların iletişimini gerçekleştirmenin başka yolu var mı?

Genel olay veya değişken, JavaScript'e göre İyi Parçalara veya JavaScript tasarım kalıplarına göre önerilmemektedir.

+0

çağırabilir çok iyi açıklanmış) - kardeş ilişkileri yapmak için bunları sadece birlikte yapabilirsiniz. Ebeveyn bileşeninizin alt bileşenleri birleştirmek için tüm mantık/durumları tutmasını sağlayın, gerekli verileri sahne üzerinden çocuklara aktarın, olayları ebeveyne geri aktarın (bunu bir geri bildirimi bir destekleyici olarak geçirerek yapabilirsiniz). Bunu yapmanın üst tarafı, bileşenlerin yalnızca kendileri ve hangi bileşenleri kontrol ettikleridir, bu yüzden işler oldukça güzel bir şekilde ayrıştırılır. –

+0

Bir ana bileşenle iletişim kurmak için sahne olarak geri çağrıları kullanma örneği için bkz. Https://facebook.github.io/react/docs/tutorial.html#callbacks-as-props. –

+0

Ben reajs için yeni ama bu yardımcı olacaktır.' 've sonra' someFunction: function() {this.setState ({x: "/"})} 've sonra ekleyin ' –

cevap

1

Değişkenleri AudioPlayer bileşenine geçirmek için durumu kullanabilirsiniz. Ben ikinci olduğunu sanmıyorum rağmen Sonra SubtitleRow bileşeninde sen (siz ebeveyn-çocuk/çocuk-ebeveyn ilişkileri hakkında görüşmelere bağlı sayfa fonksiyonu this.props.onClick (startTime endTime)

class Previewer extends Component { 
constructor() { 
    this.state = { 'startTime': 0, 'endTime' : 0 }; 
    this.handleClick= this.handleClick.bind(this); 
} 

handleClick(startTime, endTime) { 
    this.setState({ 
    'startTime': startTime, 
    'endTime': endTime 
    }); 
} 

    render() { 
    return (
     <AudioPlayer startTime="{this.state.startTime}" endTime="{this.state.endTime}"/> 
     <SubtitleRow onClick="{this.handleClick}" /> 
    ); 
    } 
} 
+0

Evet ama nasıl başlıyor ve SubtitleRow dan sonlanıyor? SubtitleRow bileşenindeki – JordanHendrix

+0

, this.props.onClick (startTime, endTime) öğesini çağırmalı, ardından durumu yeniden düzenleyen ana bileşende (Önizleme) handleClick işlevini çağırır, ardından ses çalar yeniden işlenecektir. yeni startTime ve endTime –