2016-12-28 31 views
5

私は、親からコンポーネント階層内の子の子まですべての関数を持っています。通常これはあまり問題にはなりませんが、子からパラメータを受け取る必要があります。 現在、このエラーメッセージが表示されています。未知(約束)TypeError:this.props.myFunctionは関数ではありません。ただ、いくつかのそれまでそうパラメータを持つ関数を引数に渡して反応を返す

class SomeComponent extends Component{ 

    constructor(props){ 
     super(props); 
     //does whatever stuff   
     this.myFunction = this.myFunction.bind(this); 

    } 

    //(only applicable to raw and normal forms) 
    myFunction(param){ 
     console.log('do something: ', param); 
    } 

    render(){ 
    return (<div><ChildComponent1 myFunction={()=>this.myFunction()}/></div>) 
    } 
} 

class ChildComponent1{ 
     render(){ 
    return (<div><ChildComponent2 myFunction={()=>this.props.myFunction()}/></div>) 
    } 
} 

class ChildComponent2{ 
     render(){ 
    return (<Button onClick={()=>this.props.myFunction(param)}>SomeButton</Button>) 
    } 
} 

:ここ

は何をして私のサンプルコードで、私は、ChildComponent2にすべての方法ダウンSomeComponentから小道具としてのMyFunctionを渡していた中で、私はそれをしたいですボタンがクリックされたときに呼び出され、ChildComponent2からパラメータを渡すときに呼び出されます。

ありがとうございます!

+0

実際の問題は、あなたのchildComponent1が実際に呼び出された引数を転送していない可能性があります。転送している関数が矢印関数でないようにリファクタリングする必要があるかもしれません最後に – Icepickle

答えて

10

あなたがそのエラーになるだろう、なぜ私は表示されませんが、あなたはmyFunction={this.myFunction}myFunction={this.props.myFunction}をやるべきこと:ちょうど不要で、転送しません

class SomeComponent extends Component{ 

    constructor(props){ 
     super(props); 
     //does whatever stuff   
     this.myFunction = this.myFunction.bind(this); 

    } 

    //(only applicable to raw and normal forms) 
    myFunction(param){ 
     console.log('do something: ', param); 
    } 

    render(){ 
    return (<div><ChildComponent1 myFunction={this.myFunction}/></div>) 
    } 
} 

class ChildComponent1{ 
     render(){ 
    return (<div><ChildComponent2 myFunction={this.props.myFunction}/></div>) 
    } 
} 

class ChildComponent2{ 
     render(){ 
    return (<Button onClick={()=>this.props.myFunction(param)}>SomeButton</Button>) 
    } 
} 

別(矢印)関数内で関数呼び出しをラッピング(中間のすべての矢印関数がパラメータを受け付けないため)

+0

は変数に当てはまりますか?それは2つのレベルがダウンしている場合はどうなりますか?また、それらを子クラスとして作成しましたが、エクスポート/インポートされたコンポーネントについて話している場合はどうなりますか? – tatsu

関連する問題