2016-09-07 6 views
0

Ich habe eine statusfreie Container-Komponente und eine statusfreie untergeordnete Tabellenkomponente. Die Tabelle muss die Breite des äußeren div der übergeordneten Komponente zur Verwendung als maxWidth kennen. Ich habe Schwierigkeiten, diesen Wert an das Kind weiterzugeben.Ist es möglich, die Breite des HTML-Elements an die statusfreie Kindkomponente zu übergeben?

Zuerst übergebe ich eine Callback-Methode an ihr äußerstes Rendering-Div als Ref, um das Ref als Variable auf dem Eltern zu speichern (das Ref ist auf dem Div; ich weiß, dass Stateless-Komponenten keine Refs haben können), Aber wenn ich dann versuche, ReactDOM.findDOMNode (parentVarContainingRefToDiv) .offsetWidth an das Kind zu übergeben, beschwert es sich, dass das Rendering des Kindes rein sein muss und keine veralteten Referenzen enthalten muss. Das gleiche passiert, wenn ich eine Methode vom Eltern übergeben, die die Breite an das Kind zurückgibt.

Ich habe versucht, die Eltern statusful zu machen und die Breite als einen Zustand zu speichern, aber ich konnte keinen guten Lebenszyklus finden, um dies zu tun (WillUpdate rendert endlos rendert, wenn der Zustand dort geändert wird). Ich überlegte, eine Kombination aus WillUpdate und ShouldUpdate zu machen, aber es klingt eklig, wenn es überhaupt funktionieren würde.

Eine andere Sache, die ich in Erwägung zog, war das Senden des Kindes eine Methode, mit der es noch eine andere Methode an die Eltern zurücksendet, um den Breitenwert auf dem Kind zu speichern. Klingt auch eklig.

Das einzige, was plausibel klingt von dem, wo ich stehe, ist, dass das Kind in WillReceiveProps Stateful wird und etwas Schwieriges macht.

Ist das der einzige Weg? Ich möchte beide Komponenten möglichst statusfrei halten.

Entschuldigung, es gibt keinen Code, ich habe mehrere verschiedene Versionen durchgespielt, um die obigen Szenarien zu erstellen, aber ich kann versuchen, sie neu zu erstellen, wenn eine Frage ohne Code unerträglich ist.

Antwort

0

In Reactjs, wenn Sie findDOMNode verwenden müssen, respektieren Sie nicht das Prinzip, die Struktur von React. Du solltest es NEW verwenden. Suchen Sie online nach Komponenten. Like this one;)

Das Abrufen einer Komponente aus dem DOM bricht die hierarchische Zielstruktur eines React-Projekts.

+0

Das stimmt nicht ganz. Es ist in fast allen Fällen zu vermeiden, weshalb Leute es als "NIEMALS VERWENDEN" übertreiben, aber es gibt Dinge, die ohne es nicht möglich sind, nämlich wenn tatsächliche DOM Eigenschaften und Methoden benötigt werden. Wie sonst würden Sie sich auf eine Eingabe konzentrieren()? Sie müssen das DOM-Objekt abrufen, um native DOM-Methoden wie diese aufzurufen. Aber danke für den Komponentenvorschlag. Ich schaute in den Code und er verwendet resize-Ereignisse, um die DOM-Breiteninformationen statt mit findDOMNode zu saugen. Ich mag diese Idee viel besser. –

Verwandte Themen