对不起,我的英语不好。我没有使用React Navigation中的Tab Navigation来构建导航栏,除了我尝试设置“活动”图标时,一切正常,我使用状态进行了处理,但是当我导航到另一个窗口并再次渲染该栏时,状态会重新启动导航。
我认为我有点复杂,但是我需要捕获活动屏幕以将其作为状态传递,并将图标的颜色更改为“活动”,而将其他颜色禁用。我曾尝试使用“检测活动屏幕”和onDidFocus,但我只收到有关过渡的信息,我需要屏幕的名称或ID。
我保留我的代码(此组件已导出到希望具有导航栏的每个页面)。请注意,不要使用React Native Navigation中的Tab Navigation。
export default class Navbar extends Component {
/** Navigation functions by clicking on the icon (image) */
_onPressHome() {
this.props.navigation.navigate('Main');
}
_onPressSearch() {
this.props.navigation.navigate('Main');
}
render() {
const { height, width } = Dimensions.get('window');
return (
<View style={{ flexDirection: 'row', height: height * .1, justifyContent: 'space-between', padding: height * .02 }}>
/** Icon section go Home screen */
<View style={{ height: height * .06, alignItems: 'center' }}>
<TouchableOpacity
onPress={() => this._onPressHome()}
style={styles.iconStyle}>
<Image
source={HOME_ICON}
style={{ width: height * .04, height: height * .04, }} />
<Text style={[styles.footerText, { color: this.state.colorA }]}>Inicio</Text>
</TouchableOpacity>
</View>
/** Icon section go Search screen */
<View style={{ height: height * .06, alignItems: 'center' }} >
<TouchableOpacity
onPress={() => this._onPressSearch()}
style={styles.iconStyle}>
<Image
source={SEARCH_ICON}
style={{ width: height * .04, height: height * .04, opacity: .6 }} />
<Text style={[styles.footerText, { color: this.state.colorB }]}>Inicio</Text>
</TouchableOpacity>
</View>
</View>
)
}
}
对于导航,我使用了createStackNavigator,并且
const drawerNavigatorConfig = {
contentComponent: props => <CustomDrawerContentComponent {...props}
/>,
};
const AppDrawer = createDrawerNavigator(drawerRouteConfig,
drawerNavigatorConfig);
我不知道createDrawerNavigator是否正在干扰某些东西,我读到它会生成其他键。请帮助我。
答案 0 :(得分:1)
import { useIsFocused } from '@react-navigation/native';
function Profile() {
const isFocused = useIsFocused();
return <Text>{isFocused ? 'focused' : 'unfocused'}</Text>;
}
答案 1 :(得分:0)
您可以在ViewPort库中使用this来检查用户的查看端口。这就是您可以使用库的方式
render(){
<InViewPort onChange={(isVisible) => this.checkVisible(isVisible)}>
<View style={{flex: 1, height: 200, backgroundColor: 'blue'}}>
<Text style={{color: 'white'}}>View is visible? {this.state.visible </Text>
</View>
</InViewPort>
}