2017-04-06 17 views
0

こんにちは私は現在reactjsに取り組んでいますが、非常に基本的なレベルです。私は、親から子へ、そして親から子へのデータを解析しようとしていました。親は子どもが正しく働いていますが、子どもは親になりませんでした。reactjsを使用して子から親にデータを解析する方法は?

ここに全体のシナリオがあります... 私は3つのコンポーネント..アプリケーション、ホーム、ユーザーがあります。 AppコンポーネントからHomeコンポーネントへデータを解析したい。正しく動作している。 ホームコンポーネントには、入力フィールドがあります。何かを書いてボタンをクリックすると、入力値はAppコンポーネントに解析されます。アプリは私の親で、ホーム子..ですここで

は、コード... APPコンポーネント

constructor() { 
      super() 
      this.state = { 
       userName : ' ' 
      }; 
     } 
    changeUName(newName) { 
     this.setState({ 
      userName: newName 
     }); 
     console.log('user',newName); // Getting Undefined 
    } 

    render() { 

    return (

     <div className="App"> 

     <Home changeUser = {() => this.changeUName()} /> 
     </div> 
    ); 
    } 

子コンポーネントのユーザー

constructor(props) { 

     super(); 

     this.state = { 

      userName: '' 

     }; 
    } 
    changeUName(event) { 
     this.setState({ 
      userName: event.target.value 
     }); 
    } 

    nameChange() { 
     console.log(this.state.userName)   // If I write "Test" in input field. I will get the value here. 

     this.props.changeUser(this.state.userName); // Once I parse this value, I am getting undefined.. 
    } 

    render() { 
     return(        
      <div> 
       <h1> HOME Page</h1> 
       Name : <input type="text" value={this.state.userName} onChange={(event) => this.changeUName(event)} ref="uName"/><br/> 
       <button onClick={() => this.nameChange()}>Click</button> 
      </div> 
     ) 
    } 

私はそれが間違って起こっている場所がわからないんです。私を案内してください。

<Home changeUser = {() => this.changeUName()} /> 

は、あなたが任意のパラメータなしchangeUNameを呼び出す:事前に感謝..

+1

可能性のある重複したようにそれを呼び出す[データを渡す方法ReactJSの子コンポーネントからその親に?](http://stackoverflow.com/q/38394015 /どのようにデータを渡すか、子要素から親子まで反応するか) –

+0

Thanks @ Shubham。私はこの投稿を見ました。昨日から試してみましたが、まだ未定義の値を示しています。 –

答えて

0

関数定義に受け取った小道具をバインドしていないということです。以下のスニペットを参照してください

class Parent extends React.Component { 
 
    constructor() { 
 
      super() 
 
      this.state = { 
 
       userName : ' ' 
 
      }; 
 
     } 
 
    changeUName(newName){ 
 
     this.setState({ 
 
      userName: newName 
 
     }); 
 
     console.log('user',newName); // Getting Undefined 
 
    } 
 

 
    render() { 
 

 
    return (
 

 
     <div className="App"> 
 

 
     <Home changeUser = {(value) => this.changeUName(value)} /> 
 
     </div> 
 
    ); 
 
    } 
 
} 
 
class Home extends React.Component { 
 
    constructor(props) { 
 

 
     super(); 
 

 
     this.state = { 
 

 
      userName: '' 
 

 
     }; 
 
    } 
 
    changeUName(event) { 
 
     this.setState({ 
 
      userName: event.target.value 
 
     }); 
 
    } 
 

 
    nameChange() { 
 
     console.log(this.state.userName)   // If I write "Test" in input field. I will get the value here. 
 
     
 
     this.props.changeUser(this.state.userName); 
 
    } 
 

 
    render() { 
 
     return(        
 
      <div> 
 
       <h1> HOME Page</h1> 
 
       Name : <input type="text" value={this.state.userName} onChange={(event) => this.changeUName(event)} ref="uName"/><br/> 
 
       <button onClick={() => this.nameChange()}>Click</button> 
 
      </div> 
 
     ) 
 
    } 
 
    
 
} 
 

 
ReactDOM.render(<Parent/>, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<div id="app"></div>

もないと矢印機能

changeUName = (newName) =>{ 
     this.setState({ 
      userName: newName 
     }); 
     console.log('user',newName); // Getting Undefined 
    } 

と目的球を指定しての

<Home changeUser = {this.changeUName} /> 
+0

ありがとう..素晴らしい。はい、私はこの愚かな間違いをしました。アゲインともう一度。もう一度ありがとうございます。それは今正しく動作しています.. –

0

犯人はこのコード行です。あなたの代わりに書く必要があります。

<Home changeUser = {name => this.changeUName(name)} /> 

それとも

<Home changeUser = {this.changeUName} /> 

ところで、あなたはReduxのストアにユーザー名を保存すると考えられてきましたか?あなたがまだそれを勉強していないなら、間違いなくそれを調べるべきです。 この場合、あなたはreduxストアにユーザー名を格納し、それを自分の小道具に注入してApp(および他のコンポーネント)に渡します。

+1

ありがとう@Antoine。それは働いている。しかし、私にただ一つの事を教えてください。私がこのデータを再利用すれば、どうすればいいのですか?つまり、入力値を別の子コンポーネントの解析などのプロセスに再利用したり、ページ上に印刷したりするにはどうすればよいですか? –

+1

ありがとうございました。私はそれをしました.. –

+0

@ R.Deyあなたは歓迎です:)あなたの最初の質問について、あなたは他のコンポーネントにuserNameを表示したいと思っていますか?この場合、appからターゲットの子へのコンポーネントの小道具としてuserNameを渡します。しかし、この場合、私は強く**あなたが実際にuserNameを転送する必要はありませんので、あなたは接続でreduxを使うことをお勧めします:直接、ターゲットの子コンポーネントに '接続'することができます。 –

関連する問題