Übergeben Sie die Reaktionskomponente als Requisiten

Lesezeit: 5 Minuten

Ubergeben Sie die Reaktionskomponente als Requisiten
ChefCurry7

Nehmen wir an, ich habe:

import Statement from './Statement';
import SchoolDetails from './SchoolDetails';
import AuthorizedStaff from './AuthorizedStaff';

const MultiTab = () => (
  <Tabs initialIndex={1} justify="start" className="tablisty">
    <Tab title="First Title" className="home">
      <Statement />
    </Tab>
    <Tab title="Second Title" className="check">
      <SchoolDetails />
    </Tab>
    <Tab title="Third Title" className="staff">
      <AuthorizedStaff />
    </Tab>
  </Tabs>
);

Innerhalb der Tabs-Komponente this.props hat die Eigenschaften

+Children[3]
className="tablist"
justify="start"

Kinder[0] (this.props.children) aussehen wird

$$typeof:
Symbol(react.element)
_owner:ReactCompositeComponentWrapper
_self:null
_shadowChildren:Object
_source:null
_store:Object
key:null
props:Object
ref:null
type: Tab(props, context)
__proto__
Object

Kinder[0].props aussieht

+Children (one element)
className="home"
title="first title"

Schließlich sieht das Children-Objekt so aus (das möchte ich übergeben):

$$typeof:Symbol(react.element)
_owner:ReactCompositeComponentWrapper
_self:null
_shadowChildren:undefined
_source:null
_store:
key:null
props:Object
__proto__:Object
**type: function Statement()**
ref:null

Die Frage ist, ob ich MultiTab so umschreibe

<Tabs initialIndex={1} justify="start" className="tablisty">
  <Tab title="First Title" className="home" pass={Statement} />
  <Tab title="Second Title" className="check" pass={SchoolDetails} />
  <Tab title="Third Title" className="staff" pass={AuthorizedStaff} />
</Tabs>;

Innerhalb der Tabs-Komponente

this.props.children sieht genauso aus wie oben.

children[0].props sieht aus wie

classname:"home"
**pass: function Statement()**
title: "First title"

Ich will das pass Eigentum aussehen. Oben druckt nur die Statement-Funktion aus.

$$typeof:Symbol(react.element)
_owner:ReactCompositeComponentWrapper
_self:null
_shadowChildren:undefined
_source:null
_store:
key:null
props:Object
__proto__:Object
**type: function Statement()**
ref:null

Das ist eine seltsame Frage, aber lange Geschichte Ich benutze eine Bibliothek und darauf läuft es hinaus.

  • Warum möchten Sie die Komponente als Requisiten übergeben? wann Sie importieren können

    – Aatif Bandey

    23. September 16 um 4:51 Uhr

  • @AatifBandey Weil er verschiedene Komponenten weitergibt? Wie würden Sie dies genau mit Importen lösen? Zeichenfolgen übergeben und Gleichheitsprüfungen durchführen? Das macht keinen Sinn.

    – Ivarni

    23. September 16 um 7:34 Uhr

  • Beantwortet das deine Frage? Wie übergibt man eine Reaktkomponente in eine andere Reaktkomponente, um den Inhalt der ersten Komponente einzuschließen?

    – Michael Freigeim

    1. Mai 20 um 13:47 Uhr

Ubergeben Sie die Reaktionskomponente als Requisiten
Stefan Dragnew

Verwenden this.props.children ist der idiomatische Weg, um instanziierte Komponenten an eine reagierende Komponente zu übergeben

const Label = props => <span>{props.children}</span>
const Tab = props => <div>{props.children}</div>
const Page = () => <Tab><Label>Foo</Label></Tab>

Wenn Sie eine Komponente direkt als Parameter übergeben, übergeben Sie sie ohne Instanziierung und instanziieren sie, indem Sie sie von den Requisiten abrufen. Dies ist eine idiomatische Art, Komponentenklassen weiterzugeben, die dann von den Komponenten im Baum instanziiert werden (z. B. wenn eine Komponente benutzerdefinierte Stile für ein Tag verwendet, aber den Verbraucher wählen lassen möchte, ob dieses Tag ein ist div oder span):

const Label = props => <span>{props.children}</span>
const Button = props => {
    const Inner = props.inner; // Note: variable name _must_ start with a capital letter 
    return <button><Inner>Foo</Inner></button>
}
const Page = () => <Button inner={Label}/>

Wenn Sie einen kinderähnlichen Parameter als Requisite übergeben möchten, können Sie dies tun:

const Label = props => <span>{props.content}</span>
const Tab = props => <div>{props.content}</div>
const Page = () => <Tab content={<Label content="Foo" />} />

Schließlich sind Eigenschaften in React nur normale JavaScript-Objekteigenschaften und können jeden Wert enthalten – sei es eine Zeichenfolge, eine Funktion oder ein komplexes Objekt.

  • Ich weiß, dass Sie viele gute Beispiele für Pfeilfunktionen mitgebracht haben. Aber hätten Sie etwas dagegen zu zeigen, wie der Code aussehen würde, wenn er in verschiedene Dateien aufgeteilt wäre? Ich bin ein bisschen verwirrt darüber, wie man die verwendet class und export

    – Norfeldt

    18. April 17 um 18:43 Uhr

  • Benutz einfach export const Foo = ... und dann woanders import {Foo} from "./foo"

    – Stefan Dragnew

    25. April 17 um 7:09 Uhr

  • Tipp: Stellen Sie das sicher Inner ist nicht inner. Funktioniert sonst nicht

    – ich gehe

    27. Juli 17 um 08:54 Uhr

  • Grundsätzlich eine Komponente wie übergeben <Com a="5" /> Verwandeln Sie es einfach in eine Pfeilfunktion: () => <Com a="5" />

    – totymedli

    10. Dezember 2020 um 8:44 Uhr


1642887912 837 Ubergeben Sie die Reaktionskomponente als Requisiten
Hellwach

Wie in der akzeptierten Antwort erwähnt, können Sie die spezielle Eigenschaft { props.children } verwenden. Sie können jedoch eine Komponente einfach als Requisite übergeben, wenn der Titel dies erfordert. Ich denke, das ist manchmal sauberer, da Sie vielleicht mehrere Komponenten übergeben und an verschiedenen Stellen rendern möchten. Hier ist die Reaktionsdokumentation mit einem Beispiel dafür, wie es geht:

https://reactjs.org/docs/composition-vs-inheritance.html

Stellen Sie sicher, dass Sie tatsächlich eine Komponente und kein Objekt passieren (das hat mich anfangs gestolpert).

Der Code ist einfach dieser:

const Parent = () => { 
  return (
    <Child  componentToPassDown={<SomeComp />}  />
  )
}

const Child = ({ componentToPassDown }) => { 
  return (
    <>
     {componentToPassDown}  
    </>
  )
}

  • Wenn das Kind ein Prop.how hat, greife ich darauf im Elternteil zu.

    – NicoleZ

    14. September 2020 um 18:20 Uhr

  • @NicoleZ – die Grundidee ist, die Frage umzudrehen. Das heißt, erstellen Sie die Variable im Elternteil und geben Sie sie als Prop an das Kind weiter. Wenn Sie möchten, dass das untergeordnete Element die Variable ändert, müssen Sie eine Funktion erstellen, um dies im übergeordneten Element zu tun, und diese Funktion auch als weitere Stütze weitergeben.

    – Hellwach

    14. September 20 um 19:00 Uhr

  • Wie kann ich Requisiten geben? componentToPassDown in der Kindermethode?

    – Hadi Pawar

    15. April 21 um 12:18 Uhr

  • @HadiPawar gib einfach die Requisiten weiter: <Child componentToPassDown={<SomeComp yeet={true} />} />

    – duhaime

    29. April 21 um 12:59 Uhr

Ubergeben Sie die Reaktionskomponente als Requisiten
Kimo_ouz

In meinem Fall habe ich einige Komponenten (type_of_FunctionComponent) in ein Objekt gestapelt wie:

[
 {...,one : ComponentOne},
 {...,two : ComponentTwo}
]

dann habe ich es an einen animierten Slider übergeben, und in der Slide-Komponente habe ich Folgendes getan:

const PassedComponent:FunctionComponent<any> = Passed;

dann benutze es:

<PassedComponent {...custom_props} />

Ich musste Komponenten bedingt rendern, also hat mir Folgendes geholfen:

const Parent = () => { 
  return (
    <Child  componentToPassDown={<SomeComp />}  />
  )
}

const Child = ({ componentToPassDown }) => { 
  return (
    <>
     {conditionToCheck ? componentToPassDown : <div>Some other code</div>}
    </>
  )
}

Wie wäre es mit “React.createElement(component, props)” aus dem React-Paket

const showModalScrollable = (component, props) => {
 Navigation.showModal({
   component: {
     name: COMPONENT_NAMES.modalScrollable,
     passProps: {
        renderContent: (componentId) => {
          const allProps = { componentId, ...props };

          return React.createElement(component, allProps);
    },
  },
},

}); };

.

595350cookie-checkÜbergeben Sie die Reaktionskomponente als Requisiten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy