2016-09-22 25 views
8

Ben onsenui ve tepki kullanarak liste yapıyorum. ancak değişime bağlı olarak bir bağ arayamıyorum.Özelliği undefined özellik 'bind' okunamıyor. React.js

Anlayamadım .... Herkes bunu çözebilir mi?

bu benim kodumdur. Girdi öğesinden elle çalışan yöntemi çağırmak istiyorum. Ama sonra, okunamıyor okunamıyor undefined özelliği 'bağlama'.

+0

Yığın Parçacıkları (kullandığınız '<>' araç çubuğu düğmesi ** ** çalıştırılabilir ** örnekleri içindir. Örneğiniz runnable değil, bu yüzden bir kod bloğunda olmalıdır ('{}' araç çubuğu düğmesi). Yığın Parçacıkları ReactJS'yi desteklediğinden, daha da iyi * olması * runnable olabilir. –

+0

renderRadioRow işlevi, 'this', onChange = {this.handleChange.bind (bu, row)} için kullanılan yeni bir İçerik oluşturur. –

+0

"undefined" kelimesini okuyamayan bir kanonik cevap var mı? Bu soruları görmeye devam ediyorum ve vakaların% 99'unda neden kolayca anlaşılıyor - hata mesajı herşeyin gerekli olduğunu söylüyor. X'e 'undefined' olan bazı değişkenlerden erişiyorsunuz. Önerilen eylem planı - nedenini bulun ve ya önleyin ya da X'e erişmeyin. İhtiyaçlarınıza uygun. Soruların geri kalanı bir üçüncü parti kütüphanesinde aynı şeylerle ilgilidir. Bu durumda, genellikle doğru kullanılmaması sorunu olur.Önerilen eylem planı - yanlış yapılandırılmış veya yanlış anlaşılmış olup olmadığını bulun. – vlaz

cevap

9

https://facebook.github.io/react/docs/reusable-components.html#no-autobinding

Yok Autobinding

Yöntemleri

export default class MainPage extends React.Component { 
 

 

 
    constructor(props) { 
 
     super(props); 
 
     this.state = { 
 
     selectedValue: "myself", 
 
     destinations: ["myself","somebody"], 
 
     }; 
 
    } 
 

 

 
    handleChange(value) { 
 
    this.setState({selectedValue: value}); 
 
    } 
 

 
    renderRadioRow(row) { 
 
    return (
 
     <ListItem key={row} tappable> 
 
     <label className='left'> 
 
      <Input 
 
      inputId={`radio-${row}`} 
 
      checked={row === this.selectedValue} 
 
      onChange={this.handleChange.bind(this, row)} 
 
      type='radio' 
 
      /> 
 
     </label> 
 
     <label htmlFor={`radio-${row}`} className='center'> 
 
      {row} 
 
     </label> 
 
     </ListItem> 
 
    ) 
 
    } 
 

 
    render() { 
 
    return (
 
     <Page renderToolbar={this.renderToolbar}> 
 
     <p style={{textAlign: 'center'}}> 
 
      test 
 
     </p> 
 

 
     <List 
 
      dataSource={this.state.destinations} 
 
      renderRow={this.renderRadioRow} 
 
     /> 
 
     </Page> 
 
    ); 
 
    } 
 
}

otomatik örneğine bu bağlamaz, yani düzenli ES6 sınıfları aynı anlamsal izleyin. Sen

Sen bağlama kullanabilirsiniz

() this

<div onClick={this.tick.bind(this)}> 

korumak için açıkça .bind(this) veya ok fonksiyonlarını =>: kullanmak gerekecektir Yoksa ok işlevlerini kullanabilirsiniz

<div onClick={() => this.tick()}> 

Size bağlamak tavsiye Oluşturucudaki olay işleyicileriniz her durumda yalnızca bir kez bağlanırlar:

constructor(props) { 
    super(props); 
    this.state = {count: props.initialCount}; 
    this.tick = this.tick.bind(this); 
} 
o yapıcı bir kez bağlandı olarak

Şimdi doğrudan this.tick kullanabilirsiniz:

Zaten yapıcı

<div onClick={this.tick}>

Bu uygulamanın performans için iyidir de bağlı olduğu, özellikle sen alt bileşenlerde sığ bir karşılaştırmayla shouldComponentUpdate() öğesini uygulayın.

+0

Bu işlevi satır değeriyle çağırmam gerekiyor, bu işleve bazı değerler koyabilir miyim? –

+0

Ardından, 'onChange = {() => handleChange (satır)}' – Lottamus

+0

ok işlevini kullanarak '() => handleChange (satır)' ve '() => this.handleChange (satır)' işlevlerini denedim. Ama her ikisi de undefined handleChange hatası ... –

0

export default class MainPage extends React.Component { 
 

 

 
    constructor(props) { 
 
     super(props); 
 
     this.state = { 
 
     selectedValue: "myself", 
 
     destinations: ["myself","somebody"], 
 
     }; 
 
     this.renderRadioRow = this.renderRadioRow.bind(this); 
 
    } 
 

 

 
    handleChange(value) { 
 
    this.setState({selectedValue: value}); 
 
    } 
 

 
    renderRadioRow(row) { 
 
    return (
 
     <ListItem key={row} tappable> 
 
     <label className='left'> 
 
      <Input 
 
      inputId={`radio-${row}`} 
 
      checked={row === this.selectedValue} 
 
      onChange={() => { 
 
       this.handleChange(row); 
 
      } 
 
      type='radio' 
 
      /> 
 
     </label> 
 
     <label htmlFor={`radio-${row}`} className='center'> 
 
      {row} 
 
     </label> 
 
     </ListItem> 
 
    ) 
 
    } 
 

 
    render() { 
 
    return (
 
     <Page renderToolbar={this.renderToolbar}> 
 
     <p style={{textAlign: 'center'}}> 
 
      test 
 
     </p> 
 

 
     <List 
 
      dataSource={this.state.destinations} 
 
      renderRow={this.renderRadioRow} 
 
     /> 
 
     </Page> 
 
    ); 
 
    } 
 
}

ben satırda geçirilir hangi değerin bilmiyorum ama bu işlevi ve bağlama çağırmak için işlemek bağlamı geçmeleri gerekiyor.

export default class MainPage extends React.Component { 


    constructor(props) { 
     super(props); 
     this.state = { 
      selectedValue: "myself", 
      destinations: ["myself","somebody"], 
     }; 
    } 


    handleChange(value) { 
     this.setState({selectedValue: value}); 
    } 

    renderRadioRow(row,renderContext) { 
     return (
      <ListItem key={row} tappable> 
       <label className='left'> 
        <Input 
         inputId={`radio-${row}`} 
         checked={row === this.selectedValue} 
         onChange={this.handleChange.bind(renderContext, row)} 
         type='radio' 
        /> 
       </label> 
       <label htmlFor={`radio-${row}`} className='center'> 
        {row} 
       </label> 
      </ListItem> 
     ) 
    } 

    render() { 
     var renderContext=this; 
     return (
      <Page renderToolbar={this.renderToolbar}> 
       <p style={{textAlign: 'center'}}> 
        test 
       </p> 

       <List 
        dataSource={this.state.destinations} 
        renderRow={() => this.renderRadioRow(row,renderContext)} 
       /> 
      </Page> 
     ); 
    } 
} 
İlgili konular