React Native - Наличие разных маршрутов навигации

У меня есть класс с компонентами FlatList, которые имеют пользовательские строки с текстовым полем и изображением. У меня есть оба из них в поле TouchableHighlight, так что поля можно нажимать. Я хочу, чтобы каждое из этих полей TouchableHighlight направлялось на другую страницу, но у меня возникают проблемы при этом. Вот что у меня так далеко:

import React, { Component, PropTypes } from 'react';
import { Platform, Image, Text, View, FlatList, StyleSheet, Button, Alert } from 'react-native';

import WorkoutSelectionRow from './Rows/WorkoutSelectionRow';
import Dimensions from 'Dimensions';




const DEVICE_HEIGHT = Dimensions.get('window').height;

export default class WorkoutSelectionScreen extends Component {
    constructor(props) {
        super(props);
        this.state = {
            infoSelected: false,
            workoutSelected: 'empty',
        };
    }

    onWorkoutSelect(item){
        this.setState({
            workoutSelected: item.info,
        });
        if(this.state.workoutSelected == 'Beginning'){
            this.props.navigation.navigate('BeginningWorkout', {workout: this.state.workoutSelected});
        }
        if(this.state.workoutSelected == 'Info'){
            this.props.navigation.navigate('WorkoutInfo', {workout: this.state.workoutSelected});
        }
    };

    renderSeparator = () => {
        return (
            <View style={{ height: 1, backgroundColor: "#CED0CE", }} />
        );
    };

    _renderItem = ({item}) => (
        <WorkoutSelectionRow
            title={item.title}
            selected={this.state.workoutSelected}
        />
    );

    static navigationOptions = ({ navigation }) => ({
        title: `${navigation.state.params.username}`,
    });

    render() {
        const { params } = this.props.navigation.state;
        var workoutsFB = [
            {title: 'GreySkull LP', key: '1', info: 'empty'},
            {title: 'GZCLP', key: '2', info: 'empty'},
            {title: '5-3-1', key: '3', info: 'empty'}
        ]
        var workoutsSplit = [
            {title: '5-3-1', key: '1', info: 'empty'},
            {title: 'nSuns LP', key: '2', info: 'empty'},
            {title: 'PPL', key: '3', info: 'empty'}
        ]
        return (

            <View style={styles.container}>
                <View style={{ backgroundColor: '#1389FF', height: 50 }}>
                    <Text style={styles.SectionHeaderStyle}>{this.state.workoutSelected}</Text>
                </View>
                <FlatList
                    data={workoutsFB}
                    renderItem={this._renderItem}
                />
                <View style={{ backgroundColor: '#1389FF', height: 50 }}>
                    <Text style={styles.SectionHeaderStyle}>Split Workouts</Text>
                </View>
                <FlatList
                    data={workoutsSplit}
                    renderItem={this._renderItem}
                />
            </View>

        );
    }
}

const styles = StyleSheet.create({
    container:{
        backgroundColor: '#FFFFFF',
    },
    SectionHeaderStyle:{
        backgroundColor : '#1389FF',
        fontSize : 32,
        padding: 5,
        color: '#fff',
    },
    SectionListItemStyle:{
        fontSize : 24,
        padding: 5,
        color: '#000',
        backgroundColor : '#F5F5F5'
    }


});

Вот пользовательский класс строки, использующий React.PureComponent

import React, { Component, PropTypes } from 'react';
import { TouchableHighlight, View, Text, StyleSheet, Image } from 'react-native';

import infoIcon from '../../assets/info-icon.png'

export default class WorkoutSelectionRow extends React.PureComponent {

    onInfoPress(){
        //change param so that previous screen knows to show workout information.
        this.props.selected = 'Info';

    }

    onTextPress(){
        this.props.selected = 'Beginning';
    }

    render() {
        return (

            <View style={{ flex: 1, flexDirection: 'row', height: 50, justifyContent: 'center' }}>
                <TouchableHighlight style={{ flex: 8, marginLeft: 10 }}>
                    <Text style={{ fontSize: 24 }} onPress={() => this.onTextPress()}>{this.props.title}</Text>
                </TouchableHighlight>
                <TouchableHighlight style={{ flex: 2 }}>
                    <Image source={infoIcon} style={{ height: 24, width: 24 }} onPress={() => this.onInfoPress()} />
                </TouchableHighlight>
            </View>

    );
}

}

Вот ссылка на весь мой проект, если это необходимо: https://github.com/JI511/GymRatTracker

0 ответов

Другие вопросы по тегам