2016-06-05 6 views
14

Я пытаюсь передать функцию моему дочернему компоненту. Для каждого дочернего компонента, когда пользователь нажимает на них, функция onclick будет вызывать. Эта функция onclick записывается в родительский компонент.React: передать функцию дочернему компоненту

Родитель компонент:

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

    handleClick(e) { 
    e.preventDefault(); 
    console.log(this.props); 
    } 

    render() { 
    const { agents } = this.props; 

    ... 

    var agentsNodes = agents.map(function(agent, i) { 
     if(agent.id_intervention == "") { 
     return (
      <Agent agent={agent} key={i} ticket={t} id={row_names} onClick={this.handleClick.bind(this)} /> 
     ); 
     } 
    }); 
    return (
     <div id="agents"> 
     <div className="agents-title"> 
      <h3>Title</h3> 
     </div> 
     {agentsNodes} 
     </div> 
    ); 
    } 
} 

Детский компонент:

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

    render() { 
    const { agent, t } = this.props; 

    return (
     <Link to='/' onClick={this.props.onClick}> 
     ... 
     </Link> 
    ); 
    } 
} 

На этой линии: <Agent agent={agent} key={i} ticket={t} id={row_names} onClick={this.handleClick.bind(this)} />

Следует сказать, что handleClick не определен ... Как я могу sovle эту проблему ?

Спасибо за ваш ответ.

ответ

18

Вы должны связать агент для AgentsList: Вот быстрый пример с кодом, я должен был избавиться от некоторых вещей, но вы получите идею:

http://jsfiddle.net/vhuumox0/19/

var agentsNodes = agents.map(function(agent, i) { 
    if(agent.id_intervention == "") { 
    return (
     <Agent agent={agent} key={i} ticket={t} id={row_names} onClick={this.handleClick.bind(this)} /> 
    ); 
    } 
}, this); // here 
+12

Вы также можете используйте 'onClick = {() => this.handleClick()}'. –

+0

@ ZhenyangHua на самом деле это лучший подход, поэтому вам больше не нужно использовать 'bind'. –

+1

Что делать, если есть 8 функций –

Смежные вопросы