Redux: Was ist mit Refs?

Erstellt am 27. Juni 2015  ·  8Kommentare  ·  Quelle: reduxjs/redux

Wenn ich ein <Connector> um einige Komponenten , die einen haben ref Attribut, kann ich keinen Zugriff mehr es über this.refs . Ich habe nur ein wenig umgestaltet, um das Problem zu beheben. Ich vermute, dass dies umsonst ist, wenn es um intelligente oder dumme Komponenten geht. Oder fehlt mir etwas Einfaches?

help wanted question

Hilfreichster Kommentar

Tut mir leid, aber ich sehe nicht, wie die Förderung der Verwendung von 'findDOMNode' in einem so trivialen Fall sogar als Lösung angesehen werden kann. Dies ist ein Anti-Muster! Es bringt uns zu Tagen der Abfrage zurück, in denen wir auf alle Elemente zugreifen und die Hierarchie der Knoten genau kennen müssen. Ihre Dokumente lauten zu Recht:

'findDOMNode () ist eine Escape-Luke ... Die Verwendung dieser Escape-Luke wird nicht empfohlen, da sie die Komponentenabstraktion durchdringt.'

Alle 8 Kommentare

Smart versus dumme Komponenten

Ich denke ja, Ihre _smart_- Komponente mit den Connector sollte nur _dumb_ Komponenten rendern und die erforderlichen props an sie übergeben.

@cymen du kannst dafür einen ref callback verwenden :)

const decorator = (Base) => {
  return class {
    render() {
      return <Base {...this.props} />
    }
  }
}

<strong i="7">@decorator</strong>
class Test {

  render () {
    return <div ref={this.props.refCallback}>my div</div>;
  }

}


class Wrapper {

  componentWillMount() {
    this.nestedRef = null;
  }

  componentDidMount() {
    console.log(React.findDOMNode(this.nestedRef));
  }

  setNestedRef = (ref) => {
    this.nestedRef = ref;
  }

  render() {
    return <Test refCallback={this.setNestedRef} />
  }
}

Das obige wird das div protokollieren. Vielleicht hilft das?

Dies verwendet einen Dekorateur, aber es würde wahrscheinlich genauso gut funktionieren, wenn Sie einen Rückruf an Ihre Komponenten übergeben würden, die Sie in Connector verschachtelt haben. Innerhalb des Rückrufs können Sie dann Ihrer Komponente den Ref zurückweisen.

Benötigen Sie wirklich einen verschachtelten Schiedsrichter?

Wenn Sie nur auf den DOM-Knoten zugreifen möchten, können Sie findDOMNode für die äußere Komponente ausführen, und es funktioniert einwandfrei. (Sie zeigen auf denselben Knoten.)

Wenn Sie Methoden aufrufen möchten, sollten Sie stattdessen props als deklarative Schnittstelle verwenden. Eine Diskussion hierzu finden Sie unter https://github.com/jsstyles/react-jss/issues/15 .

Wenn Sie sicher sind, dass Sie einen Schiedsrichter benötigen, können Sie sich einen verschachtelten Schiedsrichter wie https://github.com/gaearon/redux/issues/183#issuecomment -115988937 schnappen.

Zum Schluss lassen Sie mich bitte wissen, wenn etwas nicht klar ist.

Tut mir leid, aber ich sehe nicht, wie die Förderung der Verwendung von 'findDOMNode' in einem so trivialen Fall sogar als Lösung angesehen werden kann. Dies ist ein Anti-Muster! Es bringt uns zu Tagen der Abfrage zurück, in denen wir auf alle Elemente zugreifen und die Hierarchie der Knoten genau kennen müssen. Ihre Dokumente lauten zu Recht:

'findDOMNode () ist eine Escape-Luke ... Die Verwendung dieser Escape-Luke wird nicht empfohlen, da sie die Komponentenabstraktion durchdringt.'

Tut mir leid, aber ich sehe nicht, wie die Förderung der Verwendung von 'findDOMNode' in einem so trivialen Fall sogar als Lösung angesehen werden kann. Dies ist ein Anti-Muster! Es bringt uns zu Tagen der Abfrage zurück, in denen wir auf alle Elemente zugreifen und die Hierarchie der Knoten genau kennen müssen.

Ich bin mir nicht sicher was du meinst. Ich sage, wenn Sie einen Verweis auf den gerenderten Knoten benötigen (zum Beispiel um seinen Versatz und seine Größe zu berechnen), können Sie findDOMNode(this) . Ich schlage nicht vor, dass Sie „tiefer gehen“ oder es mutieren.

Das heißt, wenn Sie damit nicht zufrieden sind, verwenden Sie einfach die oben vorgeschlagenen Ref-Callback-Requisiten.

Ich denke nicht, dass wir uns auf findDOMNode(this) , da dies nicht für React-Native gilt.

@xvalentino findDOMNode ist nicht erforderlich. Siehe die Bits in Bezug auf getWrappedInstance in den API-Dokumenten .

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen