Кнопка группы кнопок React native elements исчезает при возврате к экрану

#javascript #react-native #react-navigation #react-native-elements #buttongroup

#javascript #react-native #react-навигация #react-native-elements #buttongroup

Вопрос:

Я пытался понять, что я здесь делаю не так, и я просто не могу. У меня есть два экрана, на которых я извлекаю данные из своей базы данных и нажимаю на элемент (категорию). Затем этот элемент (категория) извлекает больше данных из моей базы данных при нажатии определенного слова. У меня есть два варианта для пользователя на экране Viewcategory. Либо они могут нажать стрелку назад, чтобы вернуться назад и выбрать другие элементы из другой категории, либо они могут нажать кнопку далее, и она перенесет их на другой экран. Проблема, с которой я сталкиваюсь, заключается в том, что я нажимаю стрелку назад и возвращаюсь, чтобы выбрать другую категорию. Как только эта категория выбрана, следующая кнопка исчезает. Она не появится снова, если я не перезагружу весь свой проект.

Вот первое меню экрана

 constructor(props) {
        super(props);
        this.state = {
            restaurantlocationcode: '',
            dataSource: [],
        }
        this.updateIndex = this.updateIndex.bind(this)
    }

    updateIndex (selectedIndex) {
        this.setState({selectedIndex})
        this.viewMenu(selectedIndex)
    }

    render() {

        const buttons = ['Menu']
        const { selectedIndex } = this.state

        return (
            <View style={styles.container}>
                <MenuButtonWS navigation={this.props.navigation} />

                <Input
                    style={styles.Input} 
                    placeholder='Restaurant Location Code'
                    leftIcon={
                        <Icon
                        name='location-arrow' 
                        size={24}
                        color='black'
                        />
                    }
                    onChangeText={ (restaurantlocationcode) => this.setState({restaurantlocationcode})}
                    value={this.state.restaurantlocationcode}
                    underlineColorAndroid='transparent'
                />

                <ButtonGroup
                onPress={this.updateIndex}
                selectedIndex={selectedIndex}
                selectedButtonStyle={{backgroundColor: 'blue'}}
                buttons={buttons}
                containerStyle={styles.buttonGroup} 
                />

                <FlatList 
                    data={this.state.dataSource}
                    extraData={this.state}
                    keyExtractor={(item, index) => index.toString()}
                    renderItem={({item, index}) => (
                        <ListItem
                        titleStyle={{ color: 'black', fontWeight: 'bold'}}
                        title={`${item}`}
                        onPress={() => this.viewCategory(item)}
                        bottomDivider
                        chevron
                        />
                    )}
                />

            </View>
        )
    }

    viewMenu = (index) => {
        if (index === 0) {
            let rlc = {
                restaurantlocationcode: this.state.restaurantlocationcode,
            };
            
            fetch('URL', {
                method: 'POST',
                body: JSON.stringify(rlc),
                headers: {
                    'Accept': 'application/json',
                    'Content-Type': 'application/json',
                },
            })
                .then((response) => response.json())
                .then((responseJson) => {
                    this.setState({
                        dataSource: responseJson,
                    });
                    console.log(responseJson)
                    
                })
                .catch((error) => {
                    console.log(error);
                });
        }
    }
    
    viewCategory = (item) => {
        
        fetch('URL', {
            method: 'POST',
            body: JSON.stringify({
                category: item,
                restaurantlocationcode: this.state.restaurantlocationcode,
            }),
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            },
        })
            .then((response) => response.text())
            .then((responseJson) => {
                this.setState({
                    dataSource: responseJson,
                });
                console.log(responseJson)
                
                this.setState({dataSource: []})
                this.props.navigation.navigate('ViewCategoryWS', {
                    food: responseJson,
                    otherParam: '101',
                });
            })
            .catch((error) => {
                console.log(error);
            });
    }
}  

Вот экран, на котором вы можете просмотреть элементы в каждой категории (экран Viewcategory)

 constructor(props) {
        super(props);
        const  { navigation } = this.props;
        const cust = navigation.getParam('food', 'No-User');
        const other_param = navigation.getParam('otherParam', 'No-User');
        const cust1 = JSON.parse(cust);
        const data = cust1.map(item => ({label: item, checked: false}));
        this.state = {
            dataSource: [],
            data,
            checked: null,
            selectedIndex: 2,
        }
        this.updateIndex = this.updateIndex.bind(this)
    }

    updateIndex (selectedIndex) {
        this.setState({selectedIndex})
        this.nextScreen(selectedIndex)
    }

    render() {
        const buttons = ['Next']
        const { selectedIndex } = this.state
        const {data} = this.state;
        console.log(data);

        return (
            <View style={styles.container}>
                <BackButtonWS2 navigation={this.props.navigation} />
                
                <FlatList
                    data={data}
                    extraData={this.state}
                    keyExtractor={(item, index) => index.toString()}
                    renderItem={({ item, index }) => (
                        <CheckBox 
                        center 
                        titleProps={{ color: 'black', fontWeight: 'bold'}}
                        title={item.label}
                        iconRight
                        checked={item.checked}
                        size={30}
                        onPress={() => this.onCheck(index, item.label)}
                        containerStyle={styles.checkBox} 
                        />    
                    )}
                />
                <ButtonGroup 
                onPress={this.updateIndex}
                selectedIndex={selectedIndex}
                selectedButtonStyle={{backgroundColor: 'blue'}}
                buttons={buttons}
                containerStyle={styles.buttonGroup}
                />
                

            </View>
        )
    }

    onCheck = (index, item) => {
        let {data} = this.state;
        data[index].checked = !data[index].checked;
        this.setState({data})
        this.state.dataSource.push([item]);
        //alert(this.state.dataSource);
        console.log(this.state.dataSource);
    }

    nextScreen = (index, item) => {
        if (index === 0) {
            this.props.navigation.navigate('UsersBill', {
                foodCat: this.state.dataSource,
                otherParam: '101',
            });
            alert(this.state.dataSource);   
        }
    }
}  

Вот мой код для моей кнопки возврата

   _back = () => {
        this.props.navigation.navigate('MenuWS', {
            food: 'food',
            otherParam: '101',
        });
    } 

    render() {
        return(
            <Icon 
                name='arrow-left'
                color="#000000"
                size={25}
                style={styles.menuIcon}
                onPress={() => this._back()}
            />
        )
    }
}  

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