2016-12-28 1 views
3

Я новичок в реагировании на созданный компонент;реакция на компонентную ошибку Невозможно прочитать свойство неопределенного

export default class CartoviewDrawer extends React.Component { 

    constructor(props) { 
     super(props); 
     this.state = {open: false}; 
    } 

    _handleToggle() { 
     let open = this.state.open; 
     this.setState({open: !open}) 
    } 

    render() { 
     return (
      <div> 
       {/*<RaisedButton*/} 
       {/*label="Toggle Drawer"*/} 
       {/*onTouchTap={this.handleToggle}*/} 
       {/*/>*/} 
       <IconButton tooltip="Toggle Drawer" 
          onTouchTap={this._handleToggle} 
       > 
        <i className="material-icons">list</i> 
       </IconButton> 
       <IconButton iconClassName="muidocs-icon-custom-github"/> 
       <Drawer open={this.state.open}> 
        <MenuItem>Menu Item</MenuItem> 
        <MenuItem>Menu Item 2</MenuItem> 
       </Drawer> 
      </div> 
     ); 
    } 
} 

и в другом файле я импортирую этот компонент;

import CartoviewDrawer from './cartoview_drawer' 

тогда я использовать этот компонент:

React.createElement(AppBar,toolbarOptions,React.createElement(CartoviewDrawer)) 

, но когда я нажимаю на значок ошибки в консоли браузера и ящик не появляются. ошибка:

Uncaught TypeError: Cannot read property 'open' of undefined

+0

набор 'this' для '_handleToggle',' this._handleToggle.bind (this) 'или использовать функцию стрелки'() => this._handleToggle() ' –

+0

@AlexanderT. спасибо, что так много работаю сейчас –

ответ

1

У вас не хватает привязки к 'это' изменить onTouchTap называют это:

onTouchTap={this._handleToggle.bind(this)} 
+0

спасибо, что вы решили –

2

Добавить связывание в застройщик компонента:

constructor(props) { 
    super(props); 
    ... 
    this._handleToggle= this._handleToggle.bind(this); 
} 
Смежные вопросы