Я просто хотел бы знать, если есть лучшие практики подход к визуализации элемента с ReactJS динамическиDynamic JSX имена элементов/теги
Рассмотрим эти сценарии:
(1) Параметр Заводская компонента:
параметризируются заводскую компонент, чья работа заключается в визуализации компонент на основе параметра строки, есть способ сделать это без того, чтобы вернуться к React.createElement?
<pre><code>// The following doesn't work
class Quiz extends React.Component{
constructor (props){
super (props);
this.state = {
questionText: '',
correctAnswer: [],
assetType: ['DragNDrop','MultipleChoice','MatchPairs']
}
}
render(){
const { questionText, correctAnswer } = this.state;
return <{this.state.assetType[this.props.typeIndex] />;
}
}
</code></pre>
(2) Динамические HTML-теги:
Рендер другой тег заголовка HTML на основе целого ввода. Для этого я изначально попытался использовать строки шаблонов, но должен был прибегнуть к условному рендерингу.
<pre><code>// No joy with Template strings
render(){
<{`h${this.state.headerSize}`}>
{this.state.headerText}
</ {`h${this.state.headerSize}`}>
}
Мне нравится использовать JSX, и было бы неплохо иметь возможность использовать динамические имена элементов с ней последовательности.
Я также знаю, что:
assetType: ['DragNDrop','MultipleChoice','MatchPairs']
могут быть сохранены как:
assetType: [<DragNDrop />,<MultipleChoice />, <MatchPairs />]
, который будет работать.
Одна проблема с массивом элементов JSX заключается в том, как хранить эти элементы JSX в БД? Я предполагаю, что мне нужно будет хранить их как Strings
, но затем как их использовать, когда вытащить бланк из БД?
Может ли кто-нибудь предложить какие-либо рабочие и передовые методы подхода к этим вопросам?
Вы можете сделать '' 'когда headerSize' является' 'h1'', вам требуется это быть неполным tag/integer? –
@FabianSchultz: Действительно? Это также работает для пользовательских элементов React? В прошлый раз, когда я попытался, у меня была ошибка трансляции, которая заставила меня использовать одно из решений в моем ответе ниже ... – Pineda
Пример: http://jsbin.com/kiluwuv/edit?js,output –