【发布时间】:2021-07-09 14:04:46
【问题描述】:
我正在使用 react native 和 react-navigation 我想完成以下操作:
我有一个组件个人详细信息,我从 API 接收一些数据:头像、许可证、城市
在该组件中,我有 2 个按钮可以转到单独的页面。
但我有一个名为 的组件在所有 3 个组件之间共享
所以当我在第一个组件 PersonDetails 中接收到在这些组件之间共享的数据时。
我在第一个组件人员详细信息中收到的那些道具我希望它们在 PersonExtended 和 PersonLocation 之间共享,但不将它们作为道具传递, 因为头像是base64的,可以很大。
那么有没有其他方法可以做到这一点?
人员详情:
export const PersonDetails = ({navigation, route}) => {
/** Get user ID From parameters **/
const {userId} = route.params;
/** Redux selectors **/
const {person = null, loading = true} = useSelector(state => state.vehicles);
const dispatch = useDispatch();
// const insets = useSafeAreaInsets();
/**
* Mounted hook, loads vehicle info
*/
useEffect(() => {
dispatch(userActions.getUser({userId}));
}, []);
/**
* Handle navigaton between card
* @param {string} routeName
*/
const handleNavigation = (routeName) => {
navigation.navigate(routeName, {userId,
userInfo:
{
carAvatar: person.avatar,
licencePlate: person.licencePlate,
city: person.city
}
});
};
/**
* Handle Click on X button in right corner
*/
const handleBackNavigation = () => {
navigation.goBack();
};
if (loading) {
return <AnimatedLoader />;
}
return (
<View style={{flex: 1, paddingBottom: insets.bottom}}>
{/* Top header */}
<PersonInfo
carAvatar={person.avatar}
licencePlate={person.licencePlate}
/>
{/* Top header */}
<ScrollView>
<View style={styles.container}>
<Button
title={'extended info'} leftIcon="information-outline"
onPress={() => handleNavigation('PersonExtendedDetails')} />
<Button
title={'location'} leftIcon="information-outline"
onPress={() => handleNavigation('PersonLocation')} />
</View>
</ScrollView>
</View>
);
};
export default PersonDetails;
人物扩展:
export const PersonExtended = ({navigation, route}) => {
/** Get user ID From parameters **/
const {userId} = route.params;
/** Redux selectors **/
const {personExtended = null, loading = true} = useSelector(state => state.personExtended);
const dispatch = useDispatch();
/**
* Mounted hook, loads vehicle info
*/
useEffect(() => {
dispatch(userActions.getUserExended({userId}));
}, []);
/**
* Handle Click on X button in right corner
*/
const handleBackNavigation = () => {
navigation.goBack();
};
if (loading) {
return <AnimatedLoader />;
}
return (
<View style={{flex: 1}}>
{/* Top header */}
<PersonInfo
carAvatar={person.avatar}
licencePlate={person.licencePlate}
/>
{/* Top header */}
<View>
<Text> USER Location { personLocation.locationName } </Text>
</View>
</View>
);
};
export default PersonExtended;
人员位置:
export const UserLocation = ({navigation, route}) => {
/** Get user ID From parameters **/
const {userId} = route.params;
/** Redux selectors **/
const {personLocation = null, loading = true} = useSelector(state => state.location);
const dispatch = useDispatch();
/**
* Mounted hook, loads vehicle info
*/
useEffect(() => {
dispatch(userActions.getUserLocation({userId}));
}, []);
/**
* Handle Click on X button in right corner
*/
const handleBackNavigation = () => {
navigation.goBack();
};
if (loading) {
return <AnimatedLoader />;
}
return (
<View style={{flex: 1}}>
{/* Top header */}
<PersonInfo
carAvatar={person.avatar}
licencePlate={person.licencePlate}
/>
{/* Top header */}
<View>
<Text> USER Location { personLocation.locationName } </Text>
</View>
</View>
);
};
export default UserLocation;
【问题讨论】:
标签: reactjs react-native react-native-navigation