В NavigatorIOS есть кнопка с двумя слоями, которые при срабатывании должны изменить выбранный TabBarIOS элемент TabBarIOS.Компонент Grandchild, не изменяющий состояние бабушки и дедушки
компоненты структурированы следующим образом:
--FooterTabs
------ NavigatorIOS: Список -> ListItem
Я пытаюсь сделать выше, имея функцию внутри FooterTabs, что изменяет state и имеет TabBar.Items, чья prop 'selected' становится true, когда в 'selectedTab' состояния === различные строки.
Как так:
_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 действует точно так же, как TabBarIOS.Item.
onPress работает, но для того, чтобы изменить вкладку аналогичным образом (изменив состояние компонента), я передал _changeToAlarms() в качестве опоры для «SleepSchedules».
<Icon.TabBarItemIOS ...
>
<NavigatorIOS
initialRoute={{
component: SleepSchedules ,
title: ' ',
passProps: {changeToAlarms:()=> this._changeToAlarms()}
}}
style={{flex: 1}}
/>
</Icon.TabBarItemIOS>
И от SleepSchedules, я навигации к следующему компоненту и передавая previous'changeToAlarms' в качестве опоры.
_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')}>
);
}
И в ScheduleItem Я пытаюсь вызвать пропеллер «changeToAlarm», который был принят, который должен быть один из Footer Вкладки.
_handleTouch(){
console.log('Hello from Schedule Item');
this.props.changeToAlarms;
}
render(){
return(
...
onPress={()=> this._handleTouch()}
);
}
на консоли Logs «Привет из ScheduleItem» каждый раз, когда я нажимаю, но не регистрирует «Привет от FooterTabs» и не изменяет вкладку.
Вызывается ошибка?
Я новичок, поэтому большое вам спасибо за вашу помощь! :)
Я не знаю, подходит ли это для решения этой проблемы, но так я ее осмыслил. Если в моем подходе есть какие-либо ошибки, не стесняйтесь комментировать правильный способ сделать это. –