我正在使用react-native和redux。我正在尝试更新当前屏幕的参数,以便可以在顶栏中使用的组件中访问它们,但参数未设置。 我的代码如下:
屏幕路线:
AlertNameForm: {
screen: AlertNameForm,
navigationOptions: ({navigation}) => CancelAndDone(navigation)
}
组件屏幕:在componentDidMount中,我正在设置参数。
class AlertNameForm {
..........
componentDidMount() {
this.props.navigation.setParams({onDonePress: this.onDonePress})
}
onDonePress: () => {
// want to access this function in top-bar buttons.
}
}
以下是其他组成部分:
export const CancelAndDone = (navigation) => ({
headerLeft: <ButtonCancel navigation={navigation} />,
headerRight: <ButtonDone navigation={navigation} />
})
const ButtonDone = withTheme(({navigation, theme: { tertiaryColor } }) => (
<Button color={tertiaryColor} title="Done" onPress={() => {
if (navigation.state.params && navigation.state.params.onDonePress) {
navigation.state.params.onDonePress()
}
else {
navigation.dispatch(NavigationActions.back())
}
}} />
))
但是在ButtonDone组件中,我无法访问 onDonePress 功能 是否还有其他方法可以将当前屏幕的setParams设置为react-native。
答案 0 :(得分:0)
您应该使用navigation.state.params
引用this.props
,因为导航应作为道具传递给该组件。
答案 1 :(得分:0)
您可以在目标组件内分配功能,如下所示:
componentDidMount = () => {
const { navigation } = this.props
navigation.setParams({
onDonePress: () => this.myFunction(),
})
}
myFunction = () => { /*body function*/ }
在您的页眉或页脚组件调用中:
navigation.state.params.onDonePress
或 route.params.onDonePress
如果您使用 React Navigation v5。