5

Tepki yerel uygulamasında, uygulama iletişim bilgilerimi seçerek onay kutularını göstermeye çalışıyorum. Benim bakış onay kutusunu olarakReact-native, Liste görünümünde onay kutusu nasıl kullanılır?

<ListView 
    dataSource={this.state.dataSource} 
    renderRow={(rowData,sectionID,rowID) => 
    <TouchableHighlight onPress={() => this.goRideDetails(rowData)}> 
     <Text style={styles.rideHeader}>{rowData.name} </Text> 
     <CheckBox checked={this.state.checked} onCheckBoxPressed={()=>this.setState({checked:!this.state.checked})}/> 
    </TouchableHighlight> 
}/> 

her satır üzerinde gösteren; ama çalışmıyor: burada benim kodudur.

Herhangi biri bana yardımcı olabilir. Şimdiden teşekkürler.

+0

Her satırın kendi onay kutusu durumuna sahip olmasını istersiniz, böylece her satır kutusu ayrı ayrı kontrol edilebilir/işaretlenemez mi? "... ama çalışmıyor" derken ne demek istiyorsun? – rmevans9

+0

Yanıt için teşekkürler, Evet, tam olarak ne dediğinizi istiyorum. Onay kutusu durumu güncellenmiyor ve üzerine bastığımda onay kutusu işaretlenmiyor/işaretlenmiyor. – neelima

cevap

3

Bunu bileşen ayırma ile kolayca yapabilirsiniz. Burada bir göz atın:

export default class ContactList extends Component { 

    static propTypes = { 
     contacts: React.PropTypes.array, 
    } 

    static defaultProps = { 
     contacts: [], 
    } 

    constructor(){ 
     super(); 
     this._renderRow = this._renderRow.bind(this); 
    } 

    _renderRow(rowData,sectionID,rowID) { 
     return <Contact info={ rowData } />; 
    } 

    render() { 
     return (
      <ListView 
       dataSource={ this.props.contacts } 
       renderRow={ this._renderRow } 
      /> 
     ); 
    } 
} 

export class ContactList extends Component { 
    static propTypes = { 
     info: React.PropTypes.object.isRequired, 
    } 

    constructor(){ 
     super(); 
     this.goRideDetails = this.goRideDetails.bind(this); 
     this.setChecked = this.setChecked.bind(this); 
    } 

    goRideDetails() { 
     //your logic here 
    } 

    setChecked() { 
     this.props.info.checked = !this.props.info.checked; //will be much better to do it with redux and action creators 
    } 

    render() { 
     return (
      <TouchableHighlight onPress={ this.goRideDetails }> 
       <Text style={ styles.rideHeader }>{this.props.info.name} </Text> 
       <CheckBox checked={ this.props.info.checked } onCheckBoxPressed={ this.setChecked } /> 
      </TouchableHighlight> 
     ); 
    } 
} 

Bundan sonra sadece çağırabilirsiniz: senin JSX ve voila

<ContactList contacts={this.state.dataSource} /> 

.

Önemli not: jsx kod bloklarınızın içinde dizi işlevleri kullanmayın.

Önemli not 2: Uygulamanızın durumunu kaydetmek için redux veya flux kullanmaya başlayın. Çok daha iyi kod tasarımı sağlayacaktır.

Umut, yardımcı olacaktır.

+0

Merhaba Alex Belets, Yanıtlar için teşekkürler, ancak onay kutusu işaretli değil/işaretli değil.Öncelikle flase verildiğinde, işaretlenmemiş ile gösterilen onay kutusunu işaretlediğimde ve üzerine bastığımda/tıkladığımda onay kutusunun değeri true olarak değiştirildi, ancak onay kutusu işaretlenmemiş olarak gösterilir. – neelima

+0

{this.setState ({checked:! This.state.checked}) gibi setChecked yönteminde bazı değişiklikler yaptım. Şimdi iyi çalışıyor. çok teşekkür ederim Alex – neelima

+0

Merhaba Neelima, kontrol/uncheck için UI güncellemek için yaptığınız değişiklikler. Lütfen yardım edebilir misin? Buna gerçekten bağlıyım. – PK86