1

I use Reactjs with ES6 syntax and Babel transpiler.

When I use ES5 syntax I get expected result:

console.log(React.findDOMNode(this.refs.propertyInputs).getElementsByTagName('input'));
var propInputs = React.findDOMNode(this.refs.propertyInputs).getElementsByTagName('input');
for (var i = 0; i < propInputs.length; i++){
          propInputs[i].value = "";
}

console.log output

enter image description here

but when I use for...of loop

console.log(React.findDOMNode(this.refs.propertyInputs).getElementsByTagName('input'));
var propInputs = React.findDOMNode(this.refs.propertyInputs).getElementsByTagName('input');
for (let propInput of propInputs) {
         propInput.value = "";
}

Babel transpiles this code to

"use strict";

var propInputs = React.findDOMNode(undefined.refs.propertyInputs).getElementsByTagName('input');
// for (var i = 0; i < propInputs.length; i++){
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;

try {
    for (var _iterator = propInputs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
        var propInput = _step.value;

        propInput.value = "";
    }
} catch (err) {
    _didIteratorError = true;
    _iteratorError = err;
} finally {
    try {
        if (!_iteratorNormalCompletion && _iterator["return"]) {
            _iterator["return"]();
        }
    } finally {
        if (_didIteratorError) {
            throw _iteratorError;
        }
    }
}

and I get error

Uncaught TypeError: propInputs[Symbol.iterator] is not a function

Matt
  • 8,195
  • 31
  • 115
  • 225
  • 1
    This is because DOM NodeList don't have the es6 iterator method on them. Though I'm not sure if it's babel fault or your browser. I know firefox supports the iterator on NodeList and chrome doesn't. – Farid Nouri Neshat Aug 29 '15 at 12:30
  • @FaridNouriNeshat thanks for response, i use chrome. – Matt Aug 29 '15 at 12:35

0 Answers0