javascript - contentComponent 中的未定义函数 onClick
问题描述
我试图访问 createDrawerNavigator 内 contentComponent 上的按钮内的函数。问题是传递给 contentComponent 的“道具”没有我试图访问的功能,而且我不断得到“未定义”。这是代码:
const MainDrawer = createDrawerNavigator(
{
Home: {
screen: HomeScreen,
},
}, {
contentComponent: (props) => (
<View style={{ flex: 1 }}>
<SafeAreaView forceInset={{ top: 'always', horizontal: 'never' }}>
<DrawerItems {...props} />
<Button
color='red'
title='Logout'
onPress={() => { props.logoutCurrentUser() }}
/>
</SafeAreaView>
</View>
),
})
const RootNavigator = createStackNavigator({
MainDrawer: { screen: MainDrawer},
})
class AppNavigation extends Component {
constructor(props) {
super(props);
}
logoutCurrentUser = () => {
console.log("LOGOUT PRESSED")
}
render() {
return <RootNavigator logoutCurrentUser={this.logoutCurrentUser}/>
}
}
onPress={() => { props.logoutCurrentUser() }}是我得到错误的地方。如何正确调用此函数?
提前致谢。
解决方案
props 基本上是你传递给组件的“参数”,所以假设你有
<Component something="abcd" anotherThing="efg"></Component>
如果您访问 this.props 在该组件中,您将拥有这个
{
something: "abcd",
anotherThing: "efg",
}
所以你可以做 this.props.something 或 this.props.anotherThing 并且你可以访问这些值。
你也可以在你的方法中做这样的事情
const { something, anotherThing} = this.props;
console.log(something);
console.log(anotherThing);
所以你的代码有什么问题是你没有将 logoutCurrentUser 函数作为道具传递。
您需要将其传递给组件
const MainDrawer = createDrawerNavigator(
{
Home: {
screen: HomeScreen,
},
}, {
contentComponent: (props) => (
<View style={{ flex: 1 }}>
<SafeAreaView forceInset={{ top: 'always', horizontal: 'never' }}>
<DrawerItems {...props} />
<Button
color='red'
title='Logout'
onPress={() => { props.logoutCurrentUser() }}
/>
</SafeAreaView>
</View>
),
})
class AppNavigation extends Component {
constructor(props) {
super(props);
}
logoutCurrentUser = () => {
console.log("LOGOUT PRESSED")
}
render() {
return <MainDrawer logoutCurrentUser={this.logoutCurrentUser} />
}
}
如果您想使用 HOC 传递道具,只需将道具传递给 HOC,HOC 就像 stacknavigator
const SomeStack = createStackNavigator({
// config
});
<SomeStack
screenProps={/* this prop will get passed to the screen components as this.props.screenProps */}
/>
推荐阅读
- grafana - 如何使用 Prometheus 和 collectd 导出器绘制 grafana 中的 cpu 使用情况?
- loops - 动态变量名称/增量变量名称
- ffmpeg - 错误:未找到 FFMPEG
- c# - 更改其背景颜色时返回空单元格
- powershell - 从 powershell 在 IBM Notes 中创建新电子邮件时处理参数时遇到问题?
- macos - 带引号的 AppleScript Google 搜索
- sapui5 - 如何将 SAP HANA 表与 SAPUI5 连接
- php - PrestaShop:使用 ObjectModel 保存 MultiSelect
- debugging - Verilog 中的测试台产生错误,说明真实表达式被滥用
- r - 如何找到变量之间的重复项?