2016-04-14 13 views
3

Ich habe eine übergeordnete Komponente: Previewer, die zwei Kinder darstellt.React.js: Kommunikation zwischen zwei Kindern des gleichen Elternteils?

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

Wenn der Benutzer auf SubtitleRow klickt, sollte es passieren Variablen, z.B. startTime und EndTime, bis AudioPlayer, die Audio wiedergeben sollen.

ich die official documentation gelesen habe:

Für die Kommunikation zwischen zwei Komponenten, die keine Beziehung Eltern-Kind haben, können Sie Ihr eigenes globales Ereignis System. Abonnieren Sie Ereignisse in componentDidMount(), melden Sie sich in componentWillUnmount() ab, und rufen Sie setState() auf, wenn Sie ein Ereignis erhalten. Flussmuster ist eine der Möglichkeiten, dies zu arrangieren.

Ich denke, sie haben eine Beziehung (Geschwister), also, gibt es irgendeinen anderen Weg, ihre Kommunikation zu implementieren?

Global Event oder Variable wird nicht empfohlen, nach JavaScript die guten Teile oder etwas JavaScript-Entwurfsmuster.

+0

Die Seite spricht über Eltern-Kind/Eltern-Kind-Beziehungen verknüpft (obwohl ich nicht glaube, letzteres sehr gut erklärt) - Geschwisterbeziehungen zu tun, können Sie diese in Kombination tun. Sorgen Sie dafür, dass Ihre Elternkomponente die gesamte Logik/den logischen Zustand für die Koordination der untergeordneten Komponenten, die Weitergabe notwendiger Daten an die untergeordneten Elemente über Requisiten und die Weitergabe von Ereignissen an das übergeordnete Element übernimmt (Sie können einen Rückruf als Prop-Objekt übergeben). Der Vorteil dabei ist, dass sich Ihre Komponenten nur um sich selbst kümmern und welche Komponenten sie steuern, so dass die Dinge ziemlich gut entkoppelt sind. –

+0

Unter https://facebook.github.io/react/docs/tutorial.html#callbacks-as-props finden Sie ein Beispiel für die Verwendung von Callbacks als Requisiten für die Kommunikation mit einer übergeordneten Komponente. –

+0

Ich bin neu zu reactjs, aber möglicherweise wird dies helfen. < 'und dann' someFunction: function() {this.setState ({x: "/"})} 'und dann hinzufügen '' –

Antwort

1

Sie können den Status verwenden, um die Variablen an die AudioPlayer-Komponente zu übergeben. Dann in Ihrer SubtitleRow Komponente können Sie die Funktion this.props.onClick nennen (Startzeit, 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

ja, aber wie bekommt er den Anfang und das Ende von SubtitleRow? – JordanHendrix

+0

in der SubtitleRow-Komponente sollte er this.props.onClick (startTime, endTime) aufrufen, dann ruft er die handleClick-Funktion in der übergeordneten Komponente (Previewer) auf, die den Status aktualisiert, woraufhin der Audioplayer erneut gerendert wird die neue startTime und endTime –

Verwandte Themen