我有一个简单的应用程序,在StackNavigator
:
export const AppNavigator = StackNavigator({
Main: { screen: MainPage },
ChooseColor: { screen: ChooseColorPage }
}, {
initialRouteName: 'Main',
});
按下按钮后,应用会导航至ChooseColorPage
:
class MainPage extends Component {
onChooseColor() {
const { navigation } = this.props;
navigation.navigate('ChooseColor', {});
}
}
然后,用户可以通过按下按钮来选择颜色,这会触发导航回MainPage
:
class ChooseColorPage extends Component {
onSelectColor(colorKey) {
// this updates the state inside a `ColorReducer`
this.props.colorChanged({ colorKey });
const { navigation } = this.props;
navigation.goBack();
}
}
我希望MainPage
根据所选颜色进行更新,但 render()
方法不会在后退导航中调用。
问题:在使用render()
的屏幕之间导航时调用的react-navigation
方法是哪种情况?
我会假设更新ColorReducer
中的状态足以触发render()
中的MainPage
来电,但这不会发生。
答案 0 :(得分:0)
原来这不是导航问题,而是状态管理问题。
我在主页上错误地设置了mapStateToProps
。添加此内容后,导航更新会调用render()
。
我的app reducer:
const AppReducer = combineReducers({
color: ColorReducer,
nav: NavReducer,
});
我的ColorReducer
:
const initialState = {
colorKey: null,
};
const ColorReducer = (state = initialState, action) => {
switch (action.type) {
case 'COLOR_CHANGED':
return { ...state, colorKey: action.payload.colorKey };
default:
return state;
}
};
我的mapStateToProps
:
const mapStateToProps = state => {
return { colorKey: state.color.colorKey };
};