2016-11-29 14 views
0

重複していると申し訳ありません。親の関数を子に渡していますが、このメソッドを子供に渡すと、このエラーが返されます。 _this2.props.changeAppModeは関数ではありません。ReactJs親機能を呼び出す

私はすでにスタックオーバーフローを試みましたが、解決できませんでした。私は、私は以下の

は私のコンポーネントの子の

親コンポーネント

class Users extends React.Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      currentMode: 'read', 
      userId: null 
     }; 

     this.changeAppMode = this.changeAppMode.bind(this); 
    } 

    changeAppMode(newMode, userId) { 
     this.setState({currentMode: newMode}); 

     if (userId !== undefined) { 
      this.setState({userId: userId}); 
     } 
    } 

    render() { 

     var modeComponent = 
      <ReadUserComponent 
       changeAppMode={this.changeAppMode}/>; 

     switch (this.state.currentMode) { 
      case 'read': 
       break; 
      case 'readOne': 
       modeComponent = <ViewUser />; 
       break; 
      default: 
       break; 
     } 

     return modeComponent; 
    } 
} 
export default Users; 

子供

class ReadUserComponent extends React.Component { 
    constructor(props) { 
     super(props); 
     console.log(props); 
    }; 

    componentDidMount() { 
     this.props.fetchUsers(); 
    } 

    render(){ 
     const users = this.props.users; 
     return (
      <div className='overflow-hidden'> 
       <h1>Users List </h1> 
       <TopActionsComponent changeAppMode={this.props.changeAppMode} /> 

       <UsersTable 
        users={users} 
        changeAppMode={this.props.changeAppMode} /> 
      </div> 
     ); 
    } 
} 

ReadUserComponent.propTypes = { 
    users: React.PropTypes.array.isRequired, 
    fetchUsers: React.PropTypes.func.isRequired 
} 

function mapStateToProps(state) { 
    return { 
     users: state.users 
    } 
} 

export default connect(mapStateToProps, { fetchUsers })(ReadUserComponent); 

子[親を呼び出し、このコンポーネントです他のいくつかの概念が欠落しています可能性があります初心者です機能]

class TopActionsComponent extends React.Component { 
    render() { 
     return (
      <div> 
       <a href='#' 
        onClick={() => this.props.changeAppMode('create')} 
        className='btn btn-primary margin-bottom-1em'> Create product 
       </a> 
      </div> 
     ); 
    } 
} 

デフォルトのエクスポートTopActionsComponent;

ありがとうございます。それが重複しているが、私は一種の私はそれが子コンポーネントに結合に関連すると思うそれ

+0

あなたはそれが動作していないことを確認していますか?私はちょうどこんにちは世界のタイプの例でそれを再現しようとし、それは仕事をしているようだ。あなたが期待している結果は何ですか? – dubes

+0

それが助けになる場合は、簡単な例は、フィドルで見つけることができます:http://jsfiddle.net/09e93seL/1/ – dubes

+0

はい、その愚かな間違いの作業は私の終わりです。皆さんありがとう。 * Mayank Shukla *はすべての段階で小道具を印刷するように指示してくれました。ありがとうございます –

答えて

0

で立ち往生していた場合、本当にあなたの助け

申し訳ありません感謝しています。子コンポーネントに小道具を渡しながら、コードの下に試してみてください。 <TopActionsComponent changeAppMode={::this.props.changeAppMode} />

+0

答えにコードを入れるのを忘れました。 – dubes

+0

このエラーが発生しました **未定義のプロパティ 'bind'を読み取ることができません** –

0

これを試して、私が直面していたのと同じ問題を解決してください。

<TopActionsComponent changeAppMode={this.changeAppMode.bind(this)} /> 

はReadUserComponentこの関数を定義する:TopActionsComponent成分中

changeAppMode(type){ 
    this.props.changeAppMode(type); 
} 

<a href='#' onClick={this.changeAppMode.bind(this,'create')} 
    className='btn btn-primary margin-bottom-1em'> Create product 
</a> 

がTopActionsComponentコンポーネントで、この関数を定義する:ReadUserComponent成分中

changeAppMode(type){ 
    this.props.changeAppMode(type); 
} 
+0

コンソールにエラーは表示されませんが、機能は起動していません。私はコンソールを置いた。私の親関数ログインそのdiplayingない changeAppMode(newMode、USERID){this.setState({電流モード:newMode})。 IF(!のuserId ==未定義){this.setState({にuserId:のuserId})。 } console.log(this.state.currentMode); } –

+0

この部分を編集するonClick = {this.changeAppMode.bind(this、 'create')} –

+0

各changeAppMode()にコンソールを配置し、そのすべてが通過するかどうかを確認します。 –

0

大丈夫です。これを試して。私はそれがうまくいくと思う。

<ReadUserComponent changeAppMode={() => this.changeAppMode}/>;

<UsersTable users={users} changeAppMode={() => this.props.changeAppMode} />

+0

コンソールにエラーは表示されませんが、機能は起動していません。私は私の親関数内にconsole.logを配置するが、そのは changeAppMode(newMode、USERID){ this.setState({電流モード:newModeを})diplayingありません。 IF(のuserId ==未定義!){ this.setState({にuserId:のuserId})。 }にconsole.log(this.state.currentMode)。 } –

関連する問題