2016-05-16 7 views
0

Class2の唯一のコンテナであるClass1があります。私はTestコンポーネントをClass1に宣言します。今度はTestをパラメータとしてClass2に渡したいと思います。アクセス外部のコンテキストからのコンポーネント関数の反応

Testのコンポーネントのコンテキストには、Class2が入っている場所にアクセスすることはできますか?

export default class Class1 extends React.Component { 
    render() { 
     let test = (<Test />); 

     return (
      <Class2 test={test} /> 
     ); 
    } 
} 

export default class Class2 extends React.Component { 
    constructor(props) { 
     super(props); 
    } 

    render() { 
     let { test } = this.props; 

     // how to access Test class context? 
     test.setValue("WHERE IS MY CONTEXT?"); 

     return (
      <div>{ test }</div> 
     ); 
    } 
} 

export default class Test extends React.Component { 
    constructor(props) { 
     super(props); 

     this.state = { 
      value: "" 
     }; 
    } 

    setValue(val) { 
     this.setState({ 
      value: val 
     }); 
    } 

    render() { 
     return (
      <div>{ this.state.value }</div> 
     ); 
    } 
} 

私が直接test.propsにアクセスしようとすると、私はpropsは読み取り専用されているとすることはできないという反応させ、エラーが出る...私はWeb上で何かを見つけることとtestオブジェクトを検討しようとしたが、私は何も見つかりませんでした代わりに状態のアクセス...

+0

は、親までの状態を移動します。 – azium

+0

状態を親に移動するとどういう意味ですか?ロジックを 'Test'から' Class1'まで動かす?私はこれを望んでいない。私のプロジェクトは単純ですが、一般的なウィザードコンポーネントです。この方法で動作します。実際にはウィザードの本体コンポーネントであるクラスがあります。私はこのクラスをウィザードに渡しますが、内部に複数のテンプレートを定義することができます。だから私は、ページを設定し、それ自体を更新するために私のテストテンプレートを知らせたい。これは、この例と同じように質問に書かれています。私は子供に文脈を伝える方法を知っていますが、それは反対の方法で、子供から親に可能ですか? – Nickon

+0

データは、parent - > childの形式でしか流れません。しかし、他のデータと同様に、コールバック関数を渡すこともできます。コールバック関数を使用すると、子データを引数として渡すことができます。これは親で処理されます。 – azium

答えて

1

使用の小道具:

let { test } = this.props; 

<div>{ React.cloneElement(test, {value: "Hello World"}) }</div> 

そしてTest中:

<div>{ this.props.value }</div> 

PS:Context means something else in React

0

完全な例:あなたが親コンテナの子状態にアクセスする必要がある場合

class Class1 extends React.Component { 
    render() { 
     return (
      <Class2> 
       <Test /> 
      </Class2> 
     ); 
    } 
} 

class Class2 extends React.Component { 
    constructor(props) { 
     super(props); 
    } 

    render() { 
     return (
      <div> 
       {React.cloneElement(this.props.children, {text: "WHERE IS MY CONTEXT?"})} 
      </div> 
     ); 
    } 
} 

class Test extends React.Component { 
    constructor(props) { 
     super(props); 
    } 

    render() { 
     return (
      <div>{ this.props.text }</div> 
     ); 
    } 
} 

JSFiddle

関連する問題