React.js this.props.data.map() не является функцией

Я возлюсь с реакцией и пытаюсь разобрать и визуализировать объект json. Прямо сейчас я просто устанавливаю его с жестко запрограммированным объектом для тестирования, а не получаю его от вызова ajax.

<script type="text/jsx">

var Person = React.createClass({
render: function() {
  return (
    <div>
      <p className="personName"></p>
      <p className="personSA1"></p>
      <p className="personSA2"></p>
      <p className="zip"></p>
      <p className="state"></p>
      <p className="country"></p>
    </div>
  );
 }
});

var PersonDiv = React.createClass({
render: function() {
  var personNodes = this.props.data.map(function(personData){
    return (
      <Person
        personName={personData.person.firstname}
        personSA1={personData.person.street1}
        personSA2={personData.person.street2}
        zip={personData.person.zip}
        state={personData.person.state}
        country={personData.person.country}>
      </Person>
    )
});
return (
  <div>
    {personNodes}
  </div>
);
}
});

React.render(
 <PersonDiv data={data} />,
document.getElementById('jsonData')
);

Я устанавливаю переменную данных с

<script>
  var data = "[" + '<%=data%>' + "]";
</script>

Объект данных - это объект, который я создаю на стороне Java портлета. Я знаю, что json действителен, потому что я могу использовать JSON.parse(json) для анализа и прохождения строки, но я продолжаю получать, что map() не является функцией.

2 ответа

Похоже, что ваши данные не являются объектом JSON, это строка. Вам, вероятно, нужно бежать data = JSON.parse(data); преобразовать ваши данные в реальный объект JavaScript, чтобы иметь возможность использовать его. Простым тестом для этого было бы запустить

<script>
  var data = "[" + '<%=data%>' + "]";
  console.log(data);
  console.log(JSON.parse(data));
</script>

Вы должны заметить разницу.

Вы передаете результат console.log в качестве первого параметра React.render:

React.render(
 console.log("inside render"),
 <PersonDiv data={data} />,
document.getElementById('jsonData')
);

Это должно быть как:

console.log("will render");
React.render(
     <PersonDiv data={data} />,
    document.getElementById('jsonData')
);
Другие вопросы по тегам