【问题标题】:Understanding ({var}) notation and arrow function React Native理解 ({var}) 符号和箭头函数 React Native
【发布时间】:2018-03-15 11:43:12
【问题描述】:

我是 React Native 和 ES6 的新手,但对 JS 有一点了解,我很难找出以下代码的含义。我知道它的作用,我可以识别它的一部分,但不是全部。

  static navigationOptions = ({ navigation }) => {
    if (navigation.state.params == undefined )
    {
      return {
        headerTitle: <Text></Text>,
        headerLeft: null
      }
    }
    else
    {
      return {
        headerTitle: navigation.state.params.toolbarComponent,
        headerLeft: null
      };
    }
  };

现在我知道了箭头函数,这很好,但我真的很困惑导航变量的来源。如果我删除大括号,那么第一行看起来像这样:

static navigationOptions = ({ navigation }) => {

然后代码抱怨 prop 不存在,所以我假设这使用了导航绑定。

所以我真的不知道导航是从哪里来的,即在其他地方的另一个例子中,我怎么知道变量名是什么。如果您可以确认大括号围绕变量导航做了什么,那么我将不胜感激。我怀疑这确实是一个 ES6 问题。

【问题讨论】:

  • 为什么不直接通过 babel 运行代码并查看输出?这比在谷歌上搜索语法要容易得多。
  • 因为我是一名 Android/Java 开发人员,并且我开始将我的应用程序移植到 React,但我不知道这是什么东西......谢谢,我会试一试那。非常感谢。
  • 是的。他们有一个online compiler,您可以使用它来查看小东西,而无需通过构建过程或 CLI 工具的繁琐。
  • 太好了,再次感谢。我确实开始尝试安装 CLI,但在实际尝试使用它之前看到了您的评论。我认为有很多学习可以为我做。
  • 不用担心。一旦习惯了 JavaScript 的语法快捷方式与 Java 的规律性,您可能会开始欣赏它们。

标签: react-native ecmascript-6


【解决方案1】:
static navigationOptions = ({ navigation }) => {

^ 这是解构赋值。因此,例如,您使用对象参数调用 navigationOptions 函数,例如

navigationOptions({navigation:navigation, somethingElse: somethingElse})

然后它将从传递的对象中选择导航。

在此处阅读更多关于解构的信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

这是另一个关于这个http://wesbos.com/destructuring-objects/的好帖子

同时检查Destructuring objects as function parameters in ES6

【讨论】:

  • 想访问传递对象的'navigation'属性不行吗?
  • 谢谢。真的很有帮助,拥有它的名字是成功的一半,但是在阅读了它之后,我怀疑我对正在发生的事情有一些非常基本的误解。所以解构是从一个更复杂的对象中提取数据,所以: let {a}={a:1,b:2};表示a=1。我看不到静态分配的右侧在哪里拉出一个包含 navigationOptions 的对象。当然,您可以在其中使用解构函数,但在此之前的类中似乎不存在 navigationOptions,也不存在我知道导航来自哪里。
  • @RichShepard navigationOptions 是任何类的类方法(您在提供的代码中省略了它,我假设它是一个 React 组件),并且它期望传递一个具有navigation 属性作为参数,然后将其解构为同名的局部变量。
  • 另外请记住,在 Javascript 中您不需要像在 Java 和其他语言中那样声明变量。在 JS 中,如果你执行 x=1,那么变量 x 会自动声明。
  • 因此,如果导航属性存在于传递的对象中,那么它将被分配其他未定义的属性。
猜你喜欢
  • 1970-01-01
  • 2020-05-07
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
相关资源
最近更新 更多