2015-10-21 1 views
10

Мне нужно отобразить строку HTML (JSX) в классе React. Я не знаю, возможно ли это или нет. dangerouslySetInnerHTML недействителен для меня, потому что у меня разные компоненты реакции внутри этого файла. Это не простой HTML.Как визуализировать строку с JSX в React

У меня есть пример с ожидаемым результатом: https://jsfiddle.net/86rg50re/1/

var MyComponent = React.createClass({ 
    propTypes: { 
     owner: React.PropTypes.string 
    }, 

    render: function() { 
     return <div>Congrats {this.props.owner}! you have rendered MyComponent ({this.props.children})</div>; 
    } 
}); 

var Hello = React.createClass({ 
    render: function() { 
     return <div>Header <MyComponent owner={"Daniel"}>Yayyyyyy!</MyComponent></div>; 
    } 
}); 

Но что у меня есть это:

var Hello = React.createClass({ 
    render: function() { 
     var content = '<div>Header <MyComponent owner={"Daniel"}>Yayyyyyy!</MyComponent></div>'; 
     return transformStringToJSX(content); 
    } 

Очевидно transformStringToJSX не существует.

Есть ли способ визуализации строк jsx?

+0

Не могли бы вы просто импортировать файл как файл JavaScript и ссылаться на переменные и компоненты из него, как и на любой другой импорт? – Bojangles

+0

Я полагаю, что это мой последний вариант. Я предпочел бы другой вариант, потому что я хочу хранить только содержимое JSX в этом файле. – gyss

+0

JSX заканчивается тем, что он просто JavaScript. Я считаю, что лучше всего экспортировать тонкий компонент упаковки и импортировать его как JS. – Bojangles

ответ

9

Вы можете использовать столпотворение, чтобы превратить его

npm install --save babel-core 

Тогда в вашем коде

var babel = require('babel-core'); 
var Component = eval(babel.transform('<div><MyComponent /></div>').code); 

Пожалуйста, обратите внимание, что это вообще bad idea для преобразования строки в исполняемый код.

+0

Hi ahmohl! Он не работает с пакетом babel, вам нужно использовать «babel-core». В любом случае, если я использую «Компонент» внутри моей функции рендеринга, он выдает ошибку. – gyss

+0

Это что-то похожее на то, что я пытаюсь сделать. Но вместо одного компонента целая строка, содержащая JSX: https://github.com/facebook/react/issues/3365 – gyss

+1

Если вы используете 'eval (babel.transform (yourComponentString) .code),' он работает. Тем не менее, я бы рекомендовал не делать то, что вы пытаетесь сделать, так как это плохая практика JS для преобразования строк в код. – hampusohlsson