У меня есть пользовательский компонент заголовка с раскрывающимися списками. Когда я изменяю свой раскрывающийся список, я отправляю setYear
для обновления состояния, после чего react-navigation
отправляет меня обратно на мою домашнюю страницу / маршрут по умолчанию, даже если у меня есть использовал навигацию и указал ту же страницу. Как я могу изменить состояние и остаться на той же странице / компонентный вид?
Пользовательский заголовок:
onYearChange(e) {
const { navigate, setYear } = this.props;
// dispatch action to change state
setYear(e);
}
<View style={styles.alignMenu}>
{this.state.year ? (
<Picker
selectedValue={year}
label="Year"
onChange={this.onYearChange}
options={categories}
style={styles.picker}
/>
) : (
<View style={styles.alignMenu}>
<TouchableHighlight
onPress={() => this.show({ year: !this.state.year })}
>
<Text>
{
categories.find(category => {
return category.id == year;
}).label
}
</Text>
</TouchableHighlight>
MapDispatchToProps:
const mapDispatchToProps = dispatch => {
return {
setGroup: (group, categories, year) =>
dispatch(setGroup(group, categories, year)),
setYear: year => dispatch(setYear(year)),
setStudent: student => dispatch(setStudent(student)),
navigate: route => dispatch(navigate(route))
};
};
AppNavigator:
const AppNavigator = StackNavigator({
Home: {
screen: HomeScreen,
navigationOptions: ({ navigation }) => ({
header: false
})
},
Month: {
screen: Month
},
Day: {
screen: Day
}
});
setYear
использует мой setCredentials
редуктор для обновления учетных данных
export function setCredentials(state = initialState, action) {
switch (action.type) {
case "SET_YEAR":
return {
...state,
year: action.year,
student: 0
};
case "SET_STUDENT":
return { ...state, student: action.student };
case "SET_GROUP":
const showStudent = !checkEmptyArray(action);
return { ...state, group: action.group, showStudent };
case "CLEAR_CREDENTIALS":
return initialState;
default:
return state;
}
}
Используя учетные данные, которые вы установили из формы на homescreen
или моем customheader
- я получаю все свои данные в моем month
представлении:
componentDidMount() {
const { year, group, student } = this.props.credentials;
const Id = student || group || year;
this.props.dispatch(fetchEvents(Id));
}
Как я могу отправить свое действие fetchEvents(Id)
в заголовок после изменения year
для обновления данных в моем приложении?