Реагировать на исходные данные в модальном режиме - PullRequest
0 голосов
/ 08 июля 2019

Я все еще новичок в нативной реакции и программировании, и я пытаюсь передать предметы из моего плоского списка в модал.То, что я собираюсь передать, это значок, статус и описание.Как мне это сделать?

это мой плоский список

buildPanel(index, item) {
    let panel = [];
    let keys = DBkeys['Requests'].MyRequest;
    
    let status = item[keys['status']];
    panel.push(<View style={{ position: 'absolute', right: 0, bottom: 0, padding: normalize(5), alignItems: 'center' }} key={'status'}>
      <TouchableOpacity onPress={this.handleShowModal}>
        <Icon name={img.itemStatus[status].name} type={img.itemStatus[status].type} color={img.itemStatus[status].color} size={normalize(38)} />
      </TouchableOpacity>
    </View>);

    return panel;
    }
    
    <View style={[styles.panelContainer, status === 'success' ? {} : { backgroundColor: color.white }]}>
              <FlatList
                showsVerticalScrollIndicator={false}
                progressViewOffset={-10}
                refreshing={this.state.refreshing}
                onRefresh={this.onRefresh.bind(this)}
                onMomentumScrollEnd={(event) => event.nativeEvent.contentOffset.y === 0 ? this.onRefresh() : null}
                data={content}
                renderItem={({ item }) => item}
                keyExtractor={(item, key) => key.toString()}
                 />
            </View>
            <IconModal visible={this.state.modalVisible} close={this.handleDismissModal}/>

и это мой IconModal.js

const IconModal = (props) => {

    return(
        <Modal 
            isVisible={props.visible}
            onBackdropPress={props.close}
        >
            <View style={styles.dialogBox}> 
                <View style={styles.icon}>
                    <Icon name='open-book' type='entypo' color='#ffb732' size={normalize(70)} />
                </View>

                <View style={styles.text}>
                    <Text style={styles.status}>Status</Text>
                    <Text>Desc</Text>
                </View>
                    <TouchableOpacity onPress={props.close}>
                        <View>
                            <Text style={styles.buttonText}>GOT IT</Text>
                        </View>
                    </TouchableOpacity>   
            </View>
            
        </Modal>
    )
}

IconModal.propTypes ={
    visible: PropTypes.bool.isRequired,
    close: PropTypes.func,
}

Ответы [ 2 ]

1 голос
/ 08 июля 2019

из renderItem вашего FlatList,

Вы должны щелкнуть где-нибудь, чтобы открыть модальный режим,

при нажатии сохранить весь этот единственный элемент в переменной состояния,

Например,

, если вы используете TouchableOpacity, тогда

<TouchableOpacity onPress={this.passDataToModal}/>
...
...
passDataToModal=(item)=>{
 this.setState({modalData:item},()=>{
   //you can open modal here
});
}

, а в вашем модальном компоненте

вы можете передавать данные с помощью.

<IconModal modalData={this.state.modalData} visible={this.state.modalVisible} close={this.handleDismissModal}/>

и вы можете использовать эти данные в IconModal как this.props.modalData.

Если данных больше, вы всегда можете добавить еще один винт.

0 голосов
/ 08 июля 2019

Например:

контейнер класса расширяет Компонент { конструктор (реквизит) { супер (реквизит) this.state = { modalVisible: false, activeItemName: '', // свойство состояния для хранения имени элемента activeItemId: null, // свойство состояния для хранения идентификатора элемента } }

openModalWithItem(item) {
    this.setState({
        modalVisible: true,
        activeItemName: item.name,
        activeItemId: item.id
    })
}

render() {

    let buttonList = this.props.item.map(item => {
        return (
            <TouchableOpacity onPress={() => { this.openModalWithItem(item) }}>
                <Text>{item.name}</Text>
            </TouchableOpacity>
        )
    });

    return (
        <View>
            {/* Example Modal Component */}
            <Modal isOpen={this.state.openDeleteModal}
                itemId={this.state.activeItemId}
                itemName={this.state.activeItemName} />
            {buttonList}
        </View>
    )
}

}

...