2017-11-16 7 views
1

ベストプラクティスに基づいていくつかのリアクションコンポーネント関数を公開する正しいオプションは何ですか?上にコンポーネントを使用リアクタコンポーネント関数を公開する

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

class MyComponent extends Component {} 

export default MyComponent; 

OPTION 1

する外部様成分の関数を作成

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

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

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

OPTION 2

(内部共通関数を作成します方法のようなコンポーネントのように:

コンポーネントを使用して
class MyComponent extends Component { 
    someFunction() { 
    // 
    } 
} 

export default MyComponent; 

以上:

import MyComponent frrom './components/myAwesomeComponent'; 

class ChildComponent extends Component { 

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

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

} 

オプション3

は、それが

が存在する場合、それは意味を成していたり​​、より良い例が必要なのか分かりませんか?

+0

あなたの質問はあまりにもあります抽象。あなたが達成しようとしていることを明確に述べてください。一般的に、コンポーネントメソッドを「呼び出し」することは決してありません。代わりに、あるコンポーネントから別のコンポーネントに関数を渡します。 –

+0

これは音楽プレーヤーであり、someFunction()は再生、停止などのようなものです...コンポーネントを作成する代わりに、コンポーネントの代わりに独自のボタンが含まれています。 私は小道具の機能として私の通過の方法を知っていますが、それは親から子供だけに働く...私が欲しいものは逆ですが、それは良い練習であるかどうかわかりません。 ありがとう – Carlos

+0

リアクションでは、より宣言的な方法で作業する必要があります。 'MusicComponent.play()'の代わりに ''や ''があります。親は子供たちに小道具を渡し、小道具だけを渡します。しかし、それらの小道具は変更することができ、それは親が子どもを操作する小道具を変更することです。 –

答えて

1

someFunctionを参照する必要がある場合は、thisをメンバー関数として定義します。それ以外の場合は別のユーティリティ機能としてそれを維持するか、クラス(オプション3)内部のそれのように静的関数宣言のいずれか:

class MyComponent extends Component { 

    // ... 

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

// usage: MyComponent.someFunction() 

はまた、それを制御する必要がありESLintルールが、あります:class-methods-use-this

+0

それは私のために働いた(オプション3)。 また、静的関数を次のようにエクスポートしました。 export const someFunction = MyComponent.someFuntion; 私は次のようなものを使用できます: import MyComponent、{someFunction} from './components/myAwesomeComponent'; ありがとうございます。 – Carlos

関連する問題