Es gibt eine Schaltfläche 2 Ebenen tief in einem NavigatorIOS, die, wenn ausgelöst wird, sollte die TabBarIOS ausgewählten TabBarIOS Item ändern.Enkelkind Komponente nicht ändern Großvater Status
Die Komponenten sind wie folgt strukturiert:
--FooterTabs
------ NavigatorIOS: Liste -> ListItem
Ich bin versucht, indem eine Funktion innerhalb FooterTabs die oben zu tun, das ändert sich die state und TabBar.Items, deren Prop 'selected' wahr wird, wenn der 'selectedTab' des Staates === verschiedene Strings.
Wie so:
_changeToAlarms(){
console.log('Hello from Footer Tabs');
this.setState({
selectedTab: 'Alarms'
});
}
render(){
return(
<Icon.TabBarItemIOS title={'Alarms'}
iconName='ios-clock'
selected={this.state.selectedTab === 'Alarms'}
onPress={()=> {
this.setState({
selectedTab: 'Alarms'
});
}}>
<ComingSoon/>
</Icon.TabBarItemIOS>
<Icon.TabBarItemIOS title={'Schedules'}
iconName='ios-moon'
selected={this.state.selectedTab === 'Schedules'}
onPress={()=> {
this.setState({
selectedTab: 'Schedules'
});
}}>
</Icon.TabBarItemIOS>
);
}
* Icon.TabBatItem wirkt genau wie TabBarIOS.Item.
onPress funktioniert, aber um die Registerkarte auf ähnliche Weise ändern zu können (indem ich den Status der Komponente ändere) habe ich _changeToAlarms() als Prop an 'SleepSchedules' übergeben.
<Icon.TabBarItemIOS ...
>
<NavigatorIOS
initialRoute={{
component: SleepSchedules ,
title: ' ',
passProps: {changeToAlarms:()=> this._changeToAlarms()}
}}
style={{flex: 1}}
/>
</Icon.TabBarItemIOS>
Und von SleepSchedules, ich auf die nächste Komponente bin navigieren und vorbei an den previous'changeToAlarms' als Stütze.
_handlePress(selectedSchedule){
this.setState({selectedSchedule});
this._navScheduleItem(selectedSchedule)
}
_navScheduleItem(scheduleName){
this.props.navigator.push({
title: `${scheduleName} Sleep`,
component: ScheduleItem,
passProps: {scheduleName}, changeToAlarms:()=> this.props.changeToAlarms
})
}
render(){
return(
...
onPress={()=> this._handlePress('Monophasic')}>
);
}
Und in ScheduleItem Ich versuche, die Stütze 'changeToAlarm' zu nennen, die übergeben wurde, die die eine von Footer Tabs sein sollte.
_handleTouch(){
console.log('Hello from Schedule Item');
this.props.changeToAlarms;
}
render(){
return(
...
onPress={()=> this._handleTouch()}
);
}
Die Konsolenprotokolle ‚Hallo von ScheduleItem‘ jedes Mal, wenn ich es drücken, aber nicht log ‚Hallo aus FooterTabs‘ auch nicht die Registerkarte ändern.
Hat jemand einen Fehler gefunden?
Ich bin ein Anfänger, also vielen Dank für Ihre Hilfe! :)
Ich weiß nicht, ob dies der richtige Weg ist, um das Problem anzugehen, aber so habe ich es konzipiert. Wenn es irgendwelche Fehler in meinem Ansatz gibt, dann zögern Sie nicht, den richtigen Weg zu kommentieren. –