Я новичок в React Native. Я создаю плоский список, который содержит кнопки категорий продуктов, и после нажатия кнопки категории будет отображаться вторая страница, содержащая виды продуктов в зависимости от кнопки категории, которую нажимает пользователь.
Имена кнопки категории загружены из моей базы данных, поэтому у меня есть выбор для этого. Теперь, как я уже сказал, я должен отображать вторую страницу после нажатия кнопки.
Я уже написал код, в котором есть 2 типа запросов на выборку для отображения названия моей категории в кнопке и для перехода на вторую страницу с помощью другой выборки.
Проблема в; после нажатия кнопки категории моя кнопка не будет отображать никакую вторую страницу.
Вот мой код
Categories.js
import React, {Component} from 'react';
import {Text, TouchableHighlight, View,
StyleSheet, Platform, FlatList, AppRegistry,
TouchableOpacity
} from 'react-native';
var screen = Dimensions.get('window');*/
export default class Categories extends Component {
static navigationOptions = {
title: 'Product2'
};
state = {
data: [],
};
fetchData = async() => {
const response_Cat = await fetch('http://192.168.254.102:3307/Categories/');
const category_Cat = await response_Cat.json();
this.setState({data: category_Cat});
};
componentDidMount() {
this.fetchData();
};
FoodCat = async() => {
const { params } = this.props.navigation.navigate('state');
const response_Food = await fetch('http://192.168.254.102:3307/foods/' + params.id);
const food_Food = await response_Food.json();
this.setState({data: food_Food});
};
componentDidCatch() {
this.FoodCat();
};
render() {
const { navigate } = this.props.navigation;
const { params } = this.props.navigation.navigate('state');
return (
<View style = { styles.container }>
<FlatList
data = { this.state.data }
renderItem = {({ item }) =>
<TouchableOpacity style = {styles.buttonContainer}>
<Text style = {styles.buttonText}
onPress = { () => navigate('FoodCat', { id: item.id }) }>{ item.cat_name }</Text>
</TouchableOpacity>
}
keyExtractor = {(x,i) => i}
/>
</View>
);
}
}
AppRegistry.registerComponent('Categories', () => Categories);
Details.js
import React, {Component} from 'react';
import { AppRegistry, StyleSheet,
FlatList, Text, View }
from 'react-native';
export default class Details extends Component {
constructor() {
super()
this.state = {
dataSource: []
}
}
renderItem = ({ item }) => {
return (
<View style = {{flex: 1, flexDirection: 'row'}}>
<View style = {{flex: 1, justifyContent: 'center'}}>
<Text>
{item.menu_desc}
</Text>
<Text>
{item.menu_price}
</Text>
</View>
</View>
)
}
componentDidMount() {
const url = 'http://192.168.254.102:3307/foods/'
fetch(url)
.then((response) => response.json())
.then((responseJson) => {
console.info(responseJson);
this.setState({
dataSource: responseJson.data
})
})
.catch((error) => {
console.info(error)
})
}
render(){
console.info(this.state.dataSource)
const { params } = this.props.navigation.navigate('state');
return (
<View style = { styles.container }>
<FlatList
data = { this.state.dataSource }
renderItem = {this.renderItem}
keyExtractor = {(item, index) => index.toString()}
/>
</View>
);
}
}
AppRegistry.registerComponent('Details', () => Details);
Я думаю, вы имеете в виду это «import {StackNavigator} из 'react-navigation';», если да, то он находится в моем App.js, сэр
Вы пробовали console.info в своем onPress, действительно ли он вызывается при нажатии на элемент списка? и убедитесь, что ваш ключ к следующему экрану (FoodCat) правильный, то есть такой же, как тот, который определен в App.js.
Ахм, список работает, когда я изменяю навигацию ('FoodCat', {id: item.id}) на «navigate ('Details', {....}». Но теперь я получил пустой заголовок есть, но виды еды не отображаются.
Я понял! Я только что сделал две функции в своем бэкэнде: первая содержит категорию с Select from table, а другая - меню с Select from table id. Идентификатор - это связь между двумя таблицами.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Где вы определили свой
navigation? этоStackNavigation?