2015-05-28 3 views
0

Я новичок в React, поэтому извиняюсь, если это глупый вопрос, или если мне не хватает чего-то очевидного, но я обновляю проект, написанный для более ранней версии React чтобы следовать новому синтаксису createElement (мы не можем использовать JSX, поэтому весь наш код использует собственные вызовы JS).Вызов React.createElement с переменным именем ReactClass

Итак, это:

React.DOM.div(etc); 

Становится это:

React.createElement('div', etc); 

Во всяком случае, удар всю программу прочь, мы использовали функцию вне React-мира, который принимает имя ReactClass , и вызвал React.render, например:

React.render (window [ReactClassNameHere] (PropsGoHere), TargetGoesHere); 

Это сработало отлично.

Однако в React 0.13.3 это уже недействительно, и я не могу понять, как это сделать. Я пробовал различные способы, в том числе:

React.render(
      React.createElement(ReactClassNameHere, PropsGoHere, {}), 
      TargetGoesHere 
     ); 

... и:

React.render(React.createElement(window[ReactClassNameHere], PropsGoHere, {}),TargetGoesHere); 

... и:

React.render(
      React.createElement(React.createFactory(ReactClassNameHere), PropsGoHere, {}), 
      TargetGoesHere 
     ); 

Так, очевидно, я не знаю, достаточно понять, что происходит, и как это исправить. Любая помощь приветствуется, но, пожалуйста, будьте осторожны.

+0

Почему это недействительно? –

+0

Это совершенно верно, см. Http://jsfiddle.net/BinaryMuse/mcb1kt38/ –

ответ

1

Вы можете использовать этот. Заметьте, что я удалил {} из createElement. Если вы не хотите дочерний элемент, вы должны установить этот параметр как null или пропустить его.

React.render(
    React.createElement(ReactClassNameHere, PropsGoHere), 
    TargetGoesHere 
); 
+0

Спасибо, это на самом деле работало. Оказалось, что я имел дело с некоторой комбинацией кодовых гремлинов и проблем с нисходящим потоком, которые я неправильно интерпретировал как проблему на этом уровне. – hairbo

+0

:) рад, что это сработало! – sean

Смежные вопросы