React Native - 如何在 FlatList 属性 上使用导航?
React Native - How to use navigation on FlatList property?
我想知道如何在 FlatList 属性 上使用 React Navigation,其中 Stack.Screen 的名称来自 .json
文件。
这样,当用户单击该项目时,他们会转到应用程序的另一个页面。
数据
{
Data: [
{
"key": "0",
"label": "Test",
"goTo": "Test", <--- Here goes the name of Stack.Screen from routes.js
}
]
}
FlatList结构
function Item({ label, goTo }) {
return (
<Ripple rippleCentered onPressIn={goTo}> // (react-native-material-ripple)
<Option>
<Icon name={onIcon} size={28} color={onColor} /> // (react-native-vector-icons)
<OptionLabel color={onColor}>{label}</OptionLabel>
</Option>
</Ripple>
);
}
我已经尝试在 Ripple 的 onPressIn
属性 上使用 navigation.navigate({goTo})
,但出现 ReferenceError:找不到变量:导航
最终导出的组件
export default class Menu extends Component {
render() {
return (
<Container color={this.props.color}>
<FlatList
data={Data}
showsVerticalScrollIndicator={false}
keyExtractor={item => item.key}
numColumns={5}
columnWrapperStyle={Styles.Row}
renderItem={({ item }) =>
<Item
goTo={item.goTo}
label={item.label}
/>
}
/>
</Container>
);
}
}
从 json 文件读取
import json from './myfile.json'; // reading from json file
export default class Menu extends Component {
render() {
return (
<Container color={this.props.color}>
<FlatList
data={json.Data} // accessing Data from json
showsVerticalScrollIndicator={false}
keyExtractor={item => item.key}
numColumns={5}
columnWrapperStyle={Styles.Row}
renderItem={({ item }) =>
<Item
goTo={item.goTo}
label={item.label}
/>
}
/>
</Container>
);
}
}
导航
您可以使用 useNavigation
钩子来调用 navigation.navigate(goTo)
例如
import { useNavigation } from '@react-navigation/native';
function Item({ label, goTo }) {
const navigation = useNavigation(); // navigation hook
return (
<Ripple rippleCentered onPressIn={() => navigation.navigate(goTo)}> // navigate to goTo screen
<Option>
<Icon name={onIcon} size={28} color={onColor} />
<OptionLabel color={onColor}>{label}</OptionLabel>
</Option>
</Ripple>
);
}
请注意 Menu
需要在 NavigationContainer
之下,这样 useNavigation
才能工作。
我想知道如何在 FlatList 属性 上使用 React Navigation,其中 Stack.Screen 的名称来自 .json
文件。
这样,当用户单击该项目时,他们会转到应用程序的另一个页面。
数据
{
Data: [
{
"key": "0",
"label": "Test",
"goTo": "Test", <--- Here goes the name of Stack.Screen from routes.js
}
]
}
FlatList结构
function Item({ label, goTo }) {
return (
<Ripple rippleCentered onPressIn={goTo}> // (react-native-material-ripple)
<Option>
<Icon name={onIcon} size={28} color={onColor} /> // (react-native-vector-icons)
<OptionLabel color={onColor}>{label}</OptionLabel>
</Option>
</Ripple>
);
}
我已经尝试在 Ripple 的 onPressIn
属性 上使用 navigation.navigate({goTo})
,但出现 ReferenceError:找不到变量:导航
最终导出的组件
export default class Menu extends Component {
render() {
return (
<Container color={this.props.color}>
<FlatList
data={Data}
showsVerticalScrollIndicator={false}
keyExtractor={item => item.key}
numColumns={5}
columnWrapperStyle={Styles.Row}
renderItem={({ item }) =>
<Item
goTo={item.goTo}
label={item.label}
/>
}
/>
</Container>
);
}
}
从 json 文件读取
import json from './myfile.json'; // reading from json file
export default class Menu extends Component {
render() {
return (
<Container color={this.props.color}>
<FlatList
data={json.Data} // accessing Data from json
showsVerticalScrollIndicator={false}
keyExtractor={item => item.key}
numColumns={5}
columnWrapperStyle={Styles.Row}
renderItem={({ item }) =>
<Item
goTo={item.goTo}
label={item.label}
/>
}
/>
</Container>
);
}
}
导航
您可以使用 useNavigation
钩子来调用 navigation.navigate(goTo)
例如
import { useNavigation } from '@react-navigation/native';
function Item({ label, goTo }) {
const navigation = useNavigation(); // navigation hook
return (
<Ripple rippleCentered onPressIn={() => navigation.navigate(goTo)}> // navigate to goTo screen
<Option>
<Icon name={onIcon} size={28} color={onColor} />
<OptionLabel color={onColor}>{label}</OptionLabel>
</Option>
</Ripple>
);
}
请注意 Menu
需要在 NavigationContainer
之下,这样 useNavigation
才能工作。