2017-11-16 1 views
1

Was ist die richtige Option, um einige reaktive Komponentenfunktionen basierend auf Best Practices verfügbar zu machen.Freigeben von React Component-Funktionen

OPTION 1

erstellen, die Funktion außerhalb der Komponente wie:

export const someFunction =() => { //do something } 

class MyComponent extends Component {} 

export default MyComponent; 

die Komponente unter Verwendung der oben:

import MyComponent, { someFunction } from './components/myAwesomeComponent'; 

class ChildComponent extends Component { 
    parentComponentFunction() { 
     someFunction(); 
    } 

    render() { 
     <div> 
      <MyComponent /> 
     </div> 
    } 
} 

OPTION 2

die Funktion intern Erstellen (common Weg) der Komponente wie:

class MyComponent extends Component { 
    someFunction() { 
    // 
    } 
} 

export default MyComponent; 

Mit der Komponente oben:

import MyComponent frrom './components/myAwesomeComponent'; 

class ChildComponent extends Component { 

    parentComponentFunction() { 
      this.refs.parentComponent.someFunction(); 
    } 

    render() { 
     <div> 
     <MyComponent ref="parentComponent" /> 
     </div> 
    } 

} 

Option 3

Haben Sie keine Ahnung, ob es

existiert Ist es sinnvoll oder haben Sie ein besseres Beispiel benötigen?

+0

Ihre Frage ist zu abstrakt. Bitte geben Sie klar an, was Sie erreichen möchten. Im Allgemeinen möchten Sie niemals Komponentenmethoden "aufrufen". Übergeben Sie die Funktion stattdessen mithilfe von Requisiten von einer Komponente an eine andere. –

+0

Es ist ein Musik-Player und die someFunction() ist etwas wie spielen, zu stoppen und so weiter ... Ich möchte eine Komponente mit diesem Player erstellen, und anstelle der Komponente enthält es eigene Schaltflächen, die ich die Funktionen offen legen möchte. Ich kenne den Weg meiner Weitergabe als Requisiten funktioniert, aber es funktioniert nur von Eltern zu Kind ... was ich will ist invers, aber ich weiß nicht, ob es eine gute Praxis ist. Dank – Carlos

+0

React erfordert, dass Sie in einer deklarativen Weise arbeiten. Anstelle von 'MusicComponent.play()' hätten Sie '' oder ''. Eltern übergeben Requisiten an ihre Kinder und nur Requisiten. Aber diese Requisiten können sich ändern, und durch die Veränderung der Requisiten manipulieren Eltern ihre Kinder. –

Antwort

1

Wenn someFunction auf this verweisen muss, definieren Sie es als Elementfunktion. Ansonsten entweder halten sie als separate Nutzenfunktion oder deklarieren es als statische Funktion innerhalb der Klasse (Option 3):

class MyComponent extends Component { 

    // ... 

    static someFunction() { 
     // ... 
    } 
} 

// usage: MyComponent.someFunction() 

Auch gibt es eine ESLint Regel, dass sollte es kontrollieren: class-methods-use-this

+0

Es funktionierte für mich (Option 3). Und auch ich habe meine statischen Funktionen exportiert als: Export const someFunction = MyComponent.someFuntion; So könnte ich etwas wie verwenden: importieren MyComponent, {einigeFunktion} von './Components/myAwesomeComponent'; Vielen Dank für Ihre Antwort. – Carlos