Javascript 反应本族语:can';t从'使用一种方法;routeMapper';?

Javascript 反应本族语:can';t从'使用一种方法;routeMapper';?,javascript,react-native,react-jsx,Javascript,React Native,React Jsx,我用的是我自己的抽屉 我试图通过将变量传入NavigationBarRouteMapper来调用方法openDrawer()。我尝试在NavigationBarRouteMapper中登录,它正确地记录了传入的变量。但当它在NavigationBarRouteMapper中使用时,通过单击“打开抽屉”的左侧导航按钮,它不会执行任何操作: class drawerPractice extends Component { ... openDrawer(){ this._drawer.o

我用的是我自己的抽屉

我试图通过将变量传入NavigationBarRouteMapper来调用方法openDrawer()。我尝试在NavigationBarRouteMapper中登录,它正确地记录了传入的变量。但当它在NavigationBarRouteMapper中使用时,通过单击“打开抽屉”的左侧导航按钮,它不会执行任何操作:

class drawerPractice extends Component {
...

  openDrawer(){
    this._drawer.open()
  }

  render() {
    return (
  <Drawer
    content={<DrawerPanel/>}
    openDrawerOffset={100}
    ref={(ref) => this._drawer = ref}
    type='static'
    tweenHandler={Drawer.tweenPresets.parallax}
  >
        <Navigator
          configureScene={this.configureScene}
          initialRoute={{name: 'Start', component: Start}}
          renderScene={this.renderScene}
          style={styles.container}
          navigationBar={
            <Navigator.NavigationBar
              style={styles.navBar}
              routeMapper={NavigationBarRouteMapper(this.openDrawer)}
            />
          }
        />
  </Drawer>
    );
  }
}

var NavigationBarRouteMapper = openDrawer => ({
  LeftButton(route, navigator, index, navState){
      return(
          <TouchableHighlight onPress={()=>{openDrawer}}>
              <Text>Open Menu</Text>
          </TouchableHighlight>
      )
    }
  },...
类抽屉实践扩展组件{
...
openDrawer(){
这个._drawer.open()
}
render(){
返回(
这个.\u drawer=ref}
type='static'
tweenHandler={Drawer.tweenPresets.parallax}
>
);
}
}
var NavigationBarRouteMapper=openDrawer=>({
LeftButton(路线、导航器、索引、导航状态){
返回(
{openDrawer}}>
打开菜单
)
}
},...
为什么会出现问题?

在您的
构造函数()上添加以下内容:
this.openDrawer=this.openDrawer.bind(this);

您可能在错误的作用域上使用了
this

constructor()
方法上添加以下内容:
this.openDrawer=this.openDrawer.bind(this);


您可能在错误的范围内使用了

使用React组件时存在一个常见的混淆,新的ES6
扩展了
语法。如果使用
React.createClass
,它会将
绑定到您的所有函数,但在使用
扩展React.Component
的ES6方法时你必须手动绑定你的函数

您可以使用

<TouchableHighlight onPress={()=>{this.openDrawer.bind(this)}}>
我个人喜欢这种方法,因为我觉得这段代码更容易阅读


有关ES6方式的更多信息,请查看。

在使用React组件和新的ES6
扩展
语法时,存在一个常见的混淆。如果使用
React.createClass
,它将
绑定到所有函数,但使用
扩展React.Component
的ES6方法时,您必须手动绑定函数

您可以使用

<TouchableHighlight onPress={()=>{this.openDrawer.bind(this)}}>
我个人喜欢这种方法,因为我觉得这段代码更容易阅读



有关ES6方式的更多信息,请检查。

您检查了错误日志吗?我猜您会收到类似于
未捕获类型错误:无法读取未定义的属性“open”
@PatrickRoberts是的,就是这样!为什么要这样做,我如何解决?您检查了错误日志吗?我猜您会得到类似于
Uncaught TypeError的错误:无法读取未定义的
@PatrickRoberts的属性“open”
@PatrickRoberts是的,就是这样!为什么要这样做?我如何解决?我以前尝试过,但仍然没有激活它…它正确地记录了openDrawer()函数——在NavigationBarRouteMapper中的LeftButton函数中尝试了它。每个人都是正确的,但对它不起作用的原因感到困惑。我对NavigationBar了解不多,所以我正在寻找其他东西。我认为你的
onPress
方法没有任何作用,应该是
openDrawer}>
来返回方法或
{openDrawer()}}>
来执行它。是的!!!openDrawer()成功了!!!!非常感谢。昨天和今天整天都在为这件事担心。如果你不介意的话,你可以再问我一个问题:D.我如何传递navigator={navigator}在?的内容属性中的组件中也是如此,我尝试并记录了这个。DroperPanel中的道具,但它没有获得正确的导航器。在类外创建一个
\u navigator
变量,然后在
renderScene
方法上,您将收到当前的
navigator
作为参数。您可以执行
\u navigator=navigator
然后在任何地方访问它。我以前尝试过它,但它仍然没有被激活…它正确地记录了openDrawer()函数——在NavigationBarRouteMapper中的LeftButton函数中尝试了它。每个人都是正确的,但对它不起作用的原因感到困惑。我对NavigationBar了解不多,所以我正在寻找其他东西。我认为你的
onPress
方法没有任何作用,应该是
openDrawer}>
来返回方法或
{openDrawer()}}>
来执行它。是的!!!openDrawer()成功了!!!!非常感谢。昨天和今天整天都在为这件事担心。如果你不介意的话,你可以再问我一个问题:D.我如何传递navigator={navigator}在?的内容属性中的组件中也是如此,我尝试并记录了这个。DroperPanel中的道具,但它没有获得正确的导航器。在类外创建一个
\u navigator
变量,然后在
renderScene
方法上,您将收到当前的
navigator
作为参数。您可以执行
\u navigator=navigator
然后在任何地方访问它。再次您好,Kuf!我尝试了第二种方法,但当我单击左侧导航按钮时,它没有做任何事情……好像我也没有收到任何错误。它只是没有打开。只是为了确认,您的意思是。openDrawer=this.openDrawer.bind(这个),对吗?@JoKo yea sure..从我的代码中复制,但忘了更新。我稍后会尝试您的代码,看看是否可以添加任何内容。如果您不介意,我可以再问一个问题:D.如何传递navigator={navigator}像这样进入到的内容属性的组件中?我尝试并记录了这个。DroperPanel中的道具,但它没有得到正确的导航器。再次您好,Kuf!我尝试了第二种方法,但当我单击左导航按钮时,它没有做任何事情…像我也没有得到任何错误。它只是没有打开。只是为了确认,你的意思是this.openDrawer=this.openDrawer.bind(this),对吗?@JoKo yea sure..从我的代码中复制,但忘了更新。我稍后会尝试您的代码,看看是否可以添加任何内容。如果您不介意的话,还有一个问题:D.我如何才能像这样传递navigator={navigator}