因此,我现在已经处理了好几天的问题,并且一直在大量搜索并尝试实施解决方案。大多数解决方案建议使用
this.props.navigation.setParams({function: this.function.bind(this))
内的componentDidMount
,然后在navigationOptions->
static navigationOptions = {
header: ({navigation}) =>
<Button onPress = { () => navigation.state.params.function}/> }
这适用于onPress的按钮,但当它只是自定义组件的“道具”时,此方法似乎不起作用。
这是我的代码
static navigationOptions = {
header: ({navigation}) =>
<CustomCar refreshCar = {navigation.state.params.refreshCarSearch}
/>
transitionConfig: () => ({
transitionSpec: {
duration: 0,
timing: Animated.timing,
easing: Easing.step0,
},
}),
};
constructor(props) {
super(props)
this.state = {
Car: ' '
}
this.refreshCarSearch = this.refreshCarSearch.bind(this);
}
componentDidMount() {
this.props.navigation.setParams({ refreshCarSearch: this.refreshCarSearch });
}
refreshCarSearch(e){
this.setState({
Car: e
});
}
我总是得到navigation.state.params.refreshCarSearch是未定义的。我已经尝试了这种方法的许多变体,但无济于事。仅当我使用onPress用按钮替换组件时,此方法才有效,但是我需要将此函数传递过来。基本上,我需要让CustomCar组件(该组件必须位于屏幕顶部,因此在navigationOptions中)将值传递回此Component,以便可以进行refreshCarSearch。我读过的唯一方法是使用Redux或父组件将refreshCarSearch函数传递给“子”组件的情况。 navigationOptions中现有的组件使其变得更加困难,这可能吗?
答案 0 :(得分:0)
如果您希望此客户Car组件位于屏幕顶部,则应在渲染功能的顶部调用此组件,然后您将获得refreshCarSarch this.props.navigation.state.params.refreshCarSearch
例如:
render(){
return (
<CustomCar refreshCar = {()=>this.props.navigation.state.params.refreshCarSearch()}
/>
)
}
答案 1 :(得分:0)
考虑一个父组件,您要在道具上发送一个名为refreshCarSearch的函数,该函数在您的情况下不起作用。
<ParentComponent refreshCarSearch={this.refreshCarSearch}/>
因此,您必须像这样发送refreshCarSearch
<ParentComponent screenProps={{refreshCarSearch:this.refreshCarSearch}}/>
在子组件的navigationOptions中,您可以像这样访问它
static navigationOptions = ({navigation, screenProps}) {
header: () =>
<Button onPress = { () => screenProps && screenProps.refreshCarSearch}/>
}
要在此处添加的另一件事是,我不确定标题上的参数是否返回导航对象,但是上面的参数返回导航和screenProps对象(navigationOptions静态方法参数)。
希望对您有帮助。