2017-09-11 19 views
0

私はReact Nativeに慣れてきました。このような設定を使用して、私はその親にさえまで子供から渡すことができるよ:イベントを子要素から曾祖父に渡す

子供:

<TouchableOpacity onPress={() => {this.props.click("Cool.")}}> 

親:

constructor(props) { 
    super(props); 
    this.click = this.click.bind(this) 
} 

click(c) { 
    console.log(c) // "Cool." 
} 

render() { 
    return (
    <View> 
     <Child click={this.click}> 
    </View> 
    } 
} 

しかし、私が変更した場合親の復帰:

<View> 
    <Child click={this.props.click}> 
</View> 

はその後祖父のコンポーネントを使用します。

<View> 
    <Parent click={this.click}> 
</View> 

私はクリックイベントを取得していませんが、エラー"_this2.props.click is not a function"子要素を<TouchableOpacity onPress={this.props.click}>に変更すると、イベントが処理されないように見えます。

究極的には、Great-Grandfatherレベルでイベントハンドラをトリガして、ルートレベルで状態を変更し、変更を下位にカスケードさせたいと思います。

+2

あなたの 'parent'では' click'関数をバインドしますが、祖父はそれを知ることを期待していますか?あなたの '祖父 'でアクションを呼びたい場合は、そこに関数をバインドして世代を渡す必要があります – Nocebo

+0

@Noceboこれを拡張できますか?子コンポーネントでは、 'onPress = {()=> {this.props.click(" Cool。 ")}}>'を使ってイベントをthis.props経由で親に渡します。親では、別の世代に渡すと思う 'click = {this.props.click} 'を使用しています。ここで、バインドされた' click = {this.click.bind(this) } ' – arby

+0

あなたの説明はちょっと混乱しました。あなたは「親:」と言って、私はあなたの「親コンポーネント」が次のようになったと思った。しかし、実際にはあなたの実際の 'おじいちゃん'と ''はあなたの実際の '親 'コンポーネントでした。あなたはあなたのコンポーネントのラベルを変更したいかもしれません:) – Nocebo

答えて

2

refを使用して子供の方法にアクセスできます。あなたはこれの文書をhereに見ることができます。

class Child extends Component { 
    open =() => { 
    this.props.setVisible(true) 
    } 

    render() { 
    <View ref={this.props.refFunc}> 
     ... 
    </View> 
    } 
} 

class Parent extends Component { 
    _ref = (e) => { this._child = e } 

    runFunction =() => { 
    this._child.open(); // you can use the open function of child here 
    } 

    render() { 
    ... 
    <Child refFunc={this._ref}> 
    ... 
    } 
} 

そして、あなたは、子から親を変更したいときは、関数を定義し、propとして子コンポーネントにそれを渡すなどのイベントにそれを使用する必要があります:refを使用しての簡単な例は、以下のようなものです子コンポーネントのonPressこれを実現するには、サンプルコードは次のようになります。

このようにして、子コンポーネントから親状態にアクセスできます。

+0

これは、子供が親からParent's、Parent's Parentの状態を変更させたいのとは対照的に、Parentの子の関数(例えばOpen)を使うことを可能にします'onPress()'のようなイベントを受け取ります。 – arby

+1

私は自分の答えを更新しました。それがあなたを助けることを願っています –

+0

これは、最初の例で使用しているイベントと非常によく似ています。イベントを子から親に渡します。一度親の親の親に行くと(親の親の親に向かう途中で)、それはもはや実行されません。 – arby

関連する問題