如何让navigationOptions
与TabNavigator
内的视图进行互动?
例如,通过此问题how do I access a component's state from static navigationOptions
,我可以navigationOptions
响应组件的state
。
但是,如果我想让它更进一步响应,响应state
内的组件TabNavigator
会怎么样?
但是在我的组件中提供headerRight
没有任何效果。
export class CreateGroupCamera extends Component {
static navigationOptions = ({ navigation }) => {
const { state, setParams, navigate } = navigation;
const params = state.params || {};
return {
headerTitleStyle: { alignSelf: 'center' },
headerRight: <Button title='Next' disabled={params.validator ? !params.validator() : true} />
}
}
}
答案 0 :(得分:1)
我在尝试错误3小时后找到了答案...
按照以下步骤操作即可获得可行的版本。
TabNavigator
,而是将其包装。const Tabs = TabNavigator({
...
});
export class TabView extends Component {
render() {
return (<Tabs />);
}
}
screenProps
向下传递回调函数。被呼叫时,setParams()
进入navigationOptions
。export class TabView extends Component {
static navigationOptions = ({navigation}) => {
const { state, setParams, navigate } = navigation;
const params = state.params || {};
return {
headerRight = <Button title='Next' disabled={params.validator ? !params.validator() : true} />
};
}
_validator(validator) {
this.props.navigation.setParams({validator});
}
render() {
return (<Tabs screenProps={{ callback: this._validator } />);
}
}
screenProps.callback
传递函数。_validator() {
return this.selectedDevices().length > 0;
}
render() {
return (
<Checkbox onChecked={ () => {
this.props.screenProps.callback(this._validator);
}} />
);
}
结果: