首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释问号(?)在ES6/JSX代码中使用

解释问号(?)在ES6/JSX代码中使用
EN

Stack Overflow用户
提问于 2015-01-31 19:07:03
回答 1查看 8.9K关注 0票数 14

我在我的React应用程序中使用一个名为React forms的库。为了更好地理解它的工作原理,我一直在阅读代码,但是一个惯例不断出现,让我感到困惑。这是ES6/JSX代码:

代码语言:javascript
复制
'use strict';

var React = require('react/addons');
var cx = React.addons.classSet;

var Checkbox = React.createClass({

  propTypes: {
/...code.../
  },

  render(): ?ReactElement {
    /...code.../
  },

  onChange(e: {target: {checked: boolean}}) {
    /...code.../
  }
});

module.exports = Checkbox;

注:render(): ?ReactElement {}。这就是让我困惑的地方。有人能给我们提供更多关于这个语法的指导吗?我在谷歌上碰到了很多死胡同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-31 21:36:55

如果您转到react forms的package.json,并查看browserify部分:

代码语言:javascript
复制
  "browserify": {
    "transform": [
      [
        "reactify",
        {
          "es6": true,
          "target": "es5",
          "stripTypes": true
        }
      ]
    ]
  },

启用了stripTypes。它去掉了像?ReactElement这样的东西,这意味着maybe返回一个ReactElement (否则为null或未定义)。

{target: {checked: boolean}}意味着e有一个目标属性,它具有一个已检查的属性,它是一个布尔值。

这些都是Flow type checker的提示。您还将在所有应该进行类型检查的文件顶部的注释中看到@flow。类型检查器是一种类似于工具的单元测试,它以一种不需要手动测试的方式使您对程序的正确性更有信心。在许多情况下,这些小类型注释取代了我们本来会编写的单元测试。

如果在项目中使用flow并尝试执行以下操作:

代码语言:javascript
复制
<Checkbox />

它会给您一个类型错误,因为值和onChange是必需的道具。与运行时道具检查不同,这是在没有实际运行代码的情况下发生的(通常是在保存文件之后)。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28255419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档