2017-03-06 18 views
1

でもSO上、ここで他の質問で見つかったアドバイスに従った後、私はまだのonClick機能this.changeContentが正しく動作するように見えることはできません。どのようにonClickを動作させるには? (でも、矢印機能では動作しません)

import React from 'react'; 
import Maxim from './Maxim'; 
import Challenge from './Challenge'; 
import Prompt from './Prompt'; 

class ContentContainer extends React.Component { 
    constructor() { 
     super(); 
     this.changeContent = this.changeContent.bind(this); 
     this.state = { 
      content: "maxim" 
     } 
    } 

    changeContent(event) { 
     console.log(this); 
     if (this.state.content == "maxim") { 
      this.setState({ content: "challenge" }) 
     } else { 
      this.setState({ content: "maxim" }) 
     } 
    } 

    render() { 
     let renderedContent = null; 

     if (this.state.content == "challenge") { 
      renderedContent = <Challenge content="The trick to presence is to listen to the space between the sounds." />; 
     } else { 
      renderedContent = <Maxim quote="Silence can be heard in every sound. All you need is to listen." />; 
     } 
      return (
       <div className="content-container"> 
        {renderedContent} 
        <Prompt onClick={this.changeContent}/> 
       </div> 
      ); 
    } 
} 

export default ContentContainer; 

私はしましたbind、矢印関数(ここでのように)、単純な関数の参照を使用して試してみました...私はSOや他の場所でここで見てきたほとんど全ての変種です。私はもともとちょうどthis.changeContent()を持っていて、関数はページの読み込み時に呼び出されていました。私は少なくともそれを修正しましたが、関数はまだ呼び出されません。this.state.contentも変更されず、コンソールログthisも呼び出されません。

ありがとうございます。

+0

ていない場合は、投稿のコードは正常に見える、これを試してみてください。それが動作しない場合、問題は別の場所にある可能性があります。すべての関連情報を投稿してください。 –

+0

はい、下記のように、問題の原因となった関数参照が ''自体にありませんでした。 – Alacritas

答えて

2

チェックこの実施例を、それが動作する同様の方法でそれを書く:

class ContentContainer extends React.Component { 
 
    constructor() { 
 
     super(); 
 
     this.changeContent = this.changeContent.bind(this); 
 
     this.state = { 
 
      content: "maxim" 
 
     } 
 
    } 
 

 
    changeContent(event) { 
 
     let content = this.state.content; 
 
     this.setState({ content: content == "challenge" ? "maxim" : "challenge"}) 
 
    } 
 

 
    render() { 
 
     let renderedContent = null; 
 

 
     if (this.state.content == "challenge") { 
 
      renderedContent = <Challenge content="The trick to presence is to listen to the space between the sounds." />; 
 
     } else { 
 
      renderedContent = <Maxim quote="Silence can be heard in every sound. All you need is to listen." />; 
 
     } 
 
     return (
 
      <div className="content-container"> 
 
       {renderedContent} 
 
       <Prompt onClick={this.changeContent}/> 
 
      </div> 
 
     ); 
 
    } 
 
} 
 

 
class Challenge extends React.Component{ 
 
    render(){ 
 
    return(
 
     <div>Inside Challenge<br/>{this.props.content}</div> 
 
    ) 
 
    } 
 
} 
 

 
class Maxim extends React.Component{ 
 
    render(){ 
 
    return(
 
     <div>Inside Maxim<br/>{this.props.quote}</div> 
 
    ) 
 
    } 
 
} 
 

 
class Prompt extends React.Component{ 
 
    render(){ 
 
    return(
 
     <div style={{paddingTop: '100px'}}> 
 
      Inside Prompt<br/> 
 
      <span onClick={()=>this.props.onClick()}>*Click Me to change the Component</span> 
 
     </div> 
 
    ) 
 
    } 
 
} 
 

 
ReactDOM.render(<ContentContainer/>, 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'/>

+0

OK完璧なので、実際のコンポーネントのonClickを参照していないという問題がありました。愚かな間違い。ありがとう! – Alacritas

+0

変更内容とその理由を説明できますか? –

+0

@FelixKlingはい、 ''コンポーネントの内部に関数参照を追加しました。以前私はちょうどテキストを内部に持っていました。 – Alacritas

-1

<Prompt onClick={this.changeContent.bind(this)}/> すでに

関連する問題