2016-10-29 3 views
0

У меня есть следующий класс (только оставил необходимые детали для ясности):Зачет обработчик события не стрельбы

class CalendarAndUsage extends React. 
    constructor(props) { 
     super(props); 

     this.handleClickOnDay = this.handleClickOnDay.bind(this); 

    } 

    handleClickOnDay() { 
     console.log("wtf"); 
    } 

    render() (
      return (<Calendar onDayClick={this.handleClickOnDay} /> 
     ) 
    } 
} 

Класс Календарь выглядит следующим образом:

class Calendar extends React.Component { 
    render() { 

     let weeks = this.props.weeks.map((week) => { 
       return (
        <Week onDayClick={this.props.onDayClick} /> 
       ) 
      } 
     ); 

     return (
      <div className="calendar"> 
       {weeks} 
      </div> 
     ) 
    } 
} 

И, наконец, код недели класса :

class Week extends React.Component { 
    render() { 
     /* lots of uninteresting code */ 
     return <OffMonthDay onClick={() => this.props.onDayClick()}>{`${dayOfTheWeek} ${date.day}`}</OffMonthDay> 
    } 

Но Бог знает, что причина, когда элемент OffMonthDay нажата, событие OnClick не стрелять , Я что-то совершенно не так?

EDIT:

OffMonthDay довольно прост:

function OffMonthDay(props) { 
    return (
     <div className="col-md-1 off-month-day day"> 
      {props.children} 
     </div> 
    ) 
} 
+0

, что делает 'OffMonthDay' выглядеть? – QoP

ответ

1

Это не работает, потому что OffMonthDay не имеет onClick событие.

Он должен выглядеть как этот

function OffMonthDay(props) { 
    return (
     <div 
      onClick={props.onClick} 
      className="col-md-1 off-month-day day" 
     > 
      {props.children} 
     </div> 
    ) 
} 
+0

Darnit, я думал, что вы можете обойти это, используя «onClick» в элементе при передаче реквизита ... угадайте, что это не работает! Есть ли лучший способ передать обработчики событий, когда вам нужно пройти более двух слоев (как показано здесь)? – Amnestic

+0

Вы можете присоединить обработчик событий только к действительному элементу DOM. Не так уверен, если есть лучший способ, но [действия сокращения] (http://redux.js.org/docs/basics/UsageWithReact.html), вероятно, помогут вам в этом :) – QoP