[英]ReactJS without JSX
我正在使用React生成一个体积庞大且复杂的DOM树结构,但我选择不使用JSX( 只是为了避免从JSX到JS的最终和不可避免的转换 )。 根据某些(if-else)条件,用户可以生成或看到此DOM的某些部分。 在另一种情况下,可能需要循环来生成一些HTML元素,依此类推。
但是,在没有JSX的情况下解释React,我找不到任何好的atricles。
因此, 请指导并展示如何在没有JSX的情况下使用ReactJS并使用Factory,类,组件等。
关于此,没有足够的文件。
看起来你知道JSX转换为JS。
所以不要写JSX ......
// jsx
var data = [1,2,3];
var nodes = <ul>{data.map(function(p,i) {
return <li><Person key={i} id={p} /></li>;
})}</ul>;
只需写JS吧!
// js
var data = [1, 2, 3];
var nodes = React.createElement(
"ul",
null,
data.map(function (p, i) {
return React.createElement(
"li",
null,
React.createElement(Person, { key: i, id: p })
);
})
);
我使用以下技巧(模仿React主页上的第一个示例):
const __ = Object.assign(React.createElement, React.DOM);
var HelloMessage = React.createClass({
render: function() {
return __.div({}, 'Hello ', this.props.name);
}
});
ReactDOM.render(__(HelloMessage, {name:"John"}), document.getElementById('root'));
以下是所有四个主页示例:
虽然这段代码确实使用了一个不熟悉的习语,但__.
前缀提供了一个强大的视觉助记符,就像JSX一样可读。 由于没有密切标签,我会说更具可读性。
NoJSX是一种基于JSON的轻量级替代方案。 您可以创建如下所示的树...
- div.container.container--app
-- div.jumbotron
--- h1
--- p
...通过定义用属性(包括children
, props
和type
表示的元素的树结构。 这些镜像反映了React.createElement
的参数。
const pageHeader = {
children: [
{
children: 'Hello World.',
type: 'h1'
},
{
children: 'Foobar.',
type: 'p'
}
],
props: { className: 'jumbotron' },
type: 'div'
};
const templateData = {
children: [
{
props: { title },
type: Helmet
},
pageHeader
],
props: { className: 'container container--app' },
type: 'div'
};
const template = new NoJSX(templateData);
return template.compile();
这是我的首选方法: https : //github.com/simonrelet/react-pure-html-component-loader
这个组件应该让你编写纯html模板用作反应中的组件,而不会以如此可怕的方式混合HTML与javascript。
我看到存储库已经有一年没有更新了,所以如果我们想要能够使用反应而没有那些可怕的JSX混合在脚本中,那么这个人需要帮助。
HyperScript Helpers是基于JavaScript的选项。
比createElement和JSX更简洁,但仍然是纯JavaScript,所以例如使用JavaScript注释,数组,对象和函数,
JSX:
<MyComponent className='className'>Hi</MyComponent>
与HyperScript助手:
MyComponent('.className', ['Hi'])
React HyperScript Helpers库的 用法 :
DOM组件非常易于使用。 只需导入即可。
import { div, h2 } from 'react-hyperscript-helpers';
export default () => div('.foo', [ h2('Hello, world') ]);
对于自定义组件,您可以创建工厂函数或使用h函数,类似于react-hyperscript。
//MyComponent
import { div, hh } from 'react-hyperscript-helpers';
export default hh(() => div('Nifty Component'));
//Container
import MyComponent from './MyComponent';
import SomeOtherComponent from 'who-whats-its';
import { div, h } from 'react-hyperscript-helpers';
export default () => div('.foo', [
MyComponent(),
h(SomeOtherComponent, { foo: 'bar' })
]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.