我有两个非常简单的类。我所要做的就是从另一个组件调用一个方法,将文本打印到控制台。当用户单击类2中的导航按钮时,它应该调用类1中的_printtest函数,不幸的是,这并没有发生。
类别1
class drawerControl extends Component {
constructor(props) {
super(props);
this._printtest = this._printtest.bind(this);
};
_printtest(){
console.log("Hello World");
}
render() {
return (
<Home
openControlPanel={this.openControlPanel.bind(this)}
functest={this._printtest}>
</Home>
);
}
}类别2
class Home extends Component {
constructor(props){
super(props);
this.callPrint = this.callPrint.bind(this);
}
callPrint(){
this.props.functest()
}
render() {
return (
<TouchableHighlight onPress={this.callPrint} style= {styles.button}>
<Text>Navigate</Text>
</TouchableHighlight>
);
}
}要么我得到一个错误,告诉我"this.props.functest“不是一个函数,要么什么都没有发生。这似乎是非常简单的事情。我能做些什么来解决这个问题呢?
发布于 2017-02-09 06:19:54
我将您的代码粘贴到一个全新的原生项目中,并在我的Android手机上对其进行了测试。
如果您需要为自定义组件使用CamelCase,afaik:DrawerControl
DrawerControl类丢失问题:调用console.log()会打印到iOS控制台。您需要在终端中运行react-native log-ios才能查看输出,否则它将看起来好像什么都没有发生。你提到的this.props.functest不是一个函数的错误可能会以多种方式发生,但如果你做了我列出的更改,它应该不会发生在你在这里发布的代码中。
发布于 2017-02-09 11:56:35
我认为问题在于你的props已经是一个函数了。因此,您不需要像this.props.functest()那样对它进行命名。只需简单地调用
<TouchableHighlight onPress={this.props.functest}}>
<Text>Navigate</Text>
</TouchableHighlight>我试着做一个简单的应用程序通过RNPlay的基础上,你的代码和它的工作。https://rnplay.org/apps/2LJnbg
发布于 2017-02-09 13:25:10
在你的第一类中,改变如下。
<Home
openControlPanel={this.openControlPanel.bind(this)}
functest={this._printtest()}>
</Home>您需要调用_printtest函数
https://stackoverflow.com/questions/42124063
复制相似问题