Объяснить вопросительный знак (?) используется в коде ES6/JSX
Я использую библиотеку под названием react-forms в моем приложении React. Чтобы лучше понять, как это работает, я читал код, но конвенция продолжает появляться, что смущает меня. Вот код ES6 / JSX:
'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 {}
. Вот это меня и смущает. Может ли кто-нибудь предложить руководство о том, где узнать больше об этом синтаксисе? Я попал в много тупиков через Google.
1 ответов
если вы идете в упаковке.json из react-forms, и посмотрите на раздел browserify:
"browserify": {
"transform": [
[
"reactify",
{
"es6": true,
"target": "es5",
"stripTypes": true
}
]
]
},
это. Он удаляет такие вещи, как ?ReactElement
, что означает может быть возвращает ReactElement (и в противном случае null или undefined)
на {target: {checked: boolean}}
означает e
имеет свойство target, которое имеет свойство checked, которое является логическим.
это подсказки для проверка типа потока. Вы также увидите @flow
в a комментарий в верхней части всех файлов, которые должны быть проверены типа. Type checker - это инструментальные модульные тесты – которые делают вас более уверенными в правильности вашей программы, что не требует ручного тестирования. Во многих случаях эти небольшие аннотации типа заменяют модульные тесты, которые мы бы иначе написали.
если вы используете flow в своем проекте и пытаетесь сделать что-то вроде:
<Checkbox />
это даст вам ошибку типа, потому что value и onChange являются необходимыми реквизитами. В отличие от проверка реквизита времени выполнения, это происходит без фактического запуска кода (часто, как только вы сохраняете файл).