2017-06-02 9 views
1

こんにちは、ListViewの代わりにFlatListコンポーネントを使用し始めています。セパレータをレンダリングしようとするといくつかの問題が発生します。複数選択コンポーネントを作成しましたが、なぜ私は区切りをflatlistからレンダリングしていない、私はそれが正常に動作しているrenderItem関数内の区切りを置くが、私は小道具としてflatlistからそれを使用したい。期待された動作ではないネイティブフラットリストに反応します

レンダリングメソッドでFlatListからitemSeparatorComponent propを削除すると、コンポーネントが選択されていることを示すチェックマーク(renderIndicator())の更新が停止するので、本当に面倒です。 、 これをチェックしてください。

はネイティブリアクト:0.44.0

import React, { Component } from 'react'; 
import { Button, Icon, Divider } from 'react-native-elements'; 
import { FlatList, View, TouchableOpacity, Text } from 'react-native'; 
import { Card, CardSection } from './commons'; 
import { appMainColor } from '../constants'; 

export default class ListOrderItems extends Component { 
    static navigationOptions = { 
    title: 'Realice su selección' 
    }; 

    state = { selected: [], items: this.props.navigation.state.params.items }; 

    onItemPress = (item) => { 
    const selected = this.state.selected; 
    const index = selected.indexOf(item.name); 

    if (index === -1) { 
     selected.push(item.name); 
    } else { 
     selected.splice(index, 1); 
    } 

    this.setState({ selected }); 
    }; 

    isSelected = (item) => { 
    return this.state.selected.indexOf(item.name) !== -1; 
    }; 

    keyExtractor = (item, index) => { 
    return index; 
    }; 

    renderOkButton =() => { 
    if (this.props.navigation.state.params.type === 'multipleChoice') { 
     return (
     <Button 
      raised 
      borderRadius={5} 
      backgroundColor={appMainColor} 
      title='Aceptar' 
      onPress={() => this.props.navigation.goBack()} 
     /> 
    ); 
    } 
    }; 

    renderCancelButton =() => { 
    return (
     <Button 
     raised 
     borderRadius={5} 
     backgroundColor={appMainColor} 
     title='Cancelar' 
     onPress={() => this.props.navigation.goBack()} 
     /> 
    ); 
    }; 

    renderIndicator = (item) => { 
    if (this.isSelected(item)) { 
     return <Icon name="check-circle" color={appMainColor} />; 
    } 
    }; 

    renderSeparator =() => { 
    return <Divider />; 
    }; 

    renderItem = ({ item, index }) => { 
    return (
     <TouchableOpacity 
     activeOpacity={0.7} 
     onPress={() => this.onItemPress(item, index)} 
     > 
     <View style={styles.row}> 
      <View style={styles.optionLabel}> 
      <Text>{item.name} (${item.price})</Text> 
      </View> 
      <View style={styles.optionIndicator}> 
      {this.renderIndicator(item, index)} 
      </View> 
     </View> 
     </TouchableOpacity> 
    ); 
    }; 

    render() { 
    return (
     <View> 
     <Card> 
      <CardSection> 
      <FlatList 
       data={this.state.items} 
       keyExtractor={this.keyExtractor} 
       renderItem={this.renderItem} 
       itemSeparatorComponent={() => this.renderSeparator()} 
      /> 
      </CardSection> 
     </Card> 
     <Card> 
      <CardSection style={{ justifyContent: 'space-around' }}> 
      {this.renderOkButton()} 
      {this.renderCancelButton()} 
      </CardSection> 
     </Card> 
     </View> 
    ); 
    } 
} 

const styles = { 
    row: { 
    flexDirection: 'row', 
    padding: 5 
    }, 
    optionLabel: { 
     flex: 1, 
    }, 
    optionIndicator: { 
     width: 30, 
     height: 30, 
     justifyContent: 'center', 
     alignItems: 'center' 
    } 
}; 

答えて

1

を試すことができ、私はあなたには、いくつかのタイプミスをしたと思う、それはItemSeparatorComponent、ないitemSeparatorComponentでなければなりません。

0
あなたは、あなたが渡すデータソースでこれを設定する必要があり、選択されていると確認したい場合は

Flatlistリスト項目は、それ以外の場合はアイテムのための小道具が残って純粋な成分です。それとコンポーネントは再レンダリングされません。分周器の

はあなたがitemSeparatorComponent = {}ディバイダー

関連する問題