如何在 ES6 中将渲染函数中的 Jsx 分离到一个单独的文件中?或任何其他解决方案以将逻辑和表示分开?
How to Separate Jsx inside render function into a separate file in ES6? or any other solution in react to separate the Logic and presentation?
这里是 ES5 中的代码,其中 jsx 被写入一个单独的文件
import React from 'react';
import Template from './template.jsx';
const DetailElement = React.createClass({
render: Template
});
export default DetailElement;
enter code here
template.jsx 文件会像这样
import React from 'react';
const render = function() {
return (
<div>Hello World</div>
);
};
export default render;
如何使用 ES6 类 编写相同的内容?或者任何其他解决方案可用于进行此分离?
我有类似这样的 ES6 代码
import React, {Component} from 'react';
import Template from './template.jsx';
export default DetailElement extends Component {
componentDidMount() {
// some code
}
};
DetailElement.prototype.render = Template;
是的,这是有效的。
使用无状态函数之类的东西来定义组件之外的 JSX
。
const HTML = (props) => <div> Hello {props.name}!</div>
class A extends React.Component{
render() {
return <HTML name="Joe"/>
}
}
ReactDOM.render(<A/>, document.getElementById('app'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
这是 ES6 React 的样子
import * as React from 'react'
class SomeComponent extends React.Component{
constructor(props){
super(props);
}
render(){
return (<div className="some class name">
Hello World
</div>
)
}
}
export default SomeComponent;
//import will look like
import SomeComponent from "./SomeComponent";
细节元素将是这样的
import * as React from 'react'
import SomeComponent from "./SomeComponent";
class DetailElement extends React.Component{
constructor(props){
super(props);
}
render(){
return (<div className="some classes">
<SomeComponent/>
</div>
)
}
}
export default DetailElement;
不确定 es6 类 但是你可以在 React 组件之外写一个函数,像这样
export const somefun = (parameter1)=> {
return (<div>{parameter1} </div> )
}
然后在render方法中调用函数
render(){
return (<div className="some class name">
{somefun()}
</div>
)
}
您必须从 'react' 导入组件并将其扩展到 class。
import React, { Component } from 'react';
import Template from './template.jsx';
export class DetailElement extends Component{
render(){
return(
<Template></Template>
);
}
}
是的,你可以做到,你的模板代码就像一个功能组件,基本上它是 returns jsx 的一个功能。您只需要在 DetailElement class
中呈现您的模板
import React from 'react';
import Template from './template.jsx';
class DetailElement extends React.Component{
render = Template
};
export default DetailElement;
这是我创建的示例 codepen link
现在是一个 es6 class 特性,你可以在 class 之外定义 class 属性 或者你需要检查的 babel 转换器
这里是 ES5 中的代码,其中 jsx 被写入一个单独的文件
import React from 'react';
import Template from './template.jsx';
const DetailElement = React.createClass({
render: Template
});
export default DetailElement;
enter code here
template.jsx 文件会像这样
import React from 'react';
const render = function() {
return (
<div>Hello World</div>
);
};
export default render;
如何使用 ES6 类 编写相同的内容?或者任何其他解决方案可用于进行此分离?
我有类似这样的 ES6 代码
import React, {Component} from 'react';
import Template from './template.jsx';
export default DetailElement extends Component {
componentDidMount() {
// some code
}
};
DetailElement.prototype.render = Template;
是的,这是有效的。
使用无状态函数之类的东西来定义组件之外的 JSX
。
const HTML = (props) => <div> Hello {props.name}!</div>
class A extends React.Component{
render() {
return <HTML name="Joe"/>
}
}
ReactDOM.render(<A/>, document.getElementById('app'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
这是 ES6 React 的样子
import * as React from 'react'
class SomeComponent extends React.Component{
constructor(props){
super(props);
}
render(){
return (<div className="some class name">
Hello World
</div>
)
}
}
export default SomeComponent;
//import will look like
import SomeComponent from "./SomeComponent";
细节元素将是这样的
import * as React from 'react'
import SomeComponent from "./SomeComponent";
class DetailElement extends React.Component{
constructor(props){
super(props);
}
render(){
return (<div className="some classes">
<SomeComponent/>
</div>
)
}
}
export default DetailElement;
不确定 es6 类 但是你可以在 React 组件之外写一个函数,像这样
export const somefun = (parameter1)=> {
return (<div>{parameter1} </div> )
}
然后在render方法中调用函数
render(){
return (<div className="some class name">
{somefun()}
</div>
)
}
您必须从 'react' 导入组件并将其扩展到 class。
import React, { Component } from 'react';
import Template from './template.jsx';
export class DetailElement extends Component{
render(){
return(
<Template></Template>
);
}
}
是的,你可以做到,你的模板代码就像一个功能组件,基本上它是 returns jsx 的一个功能。您只需要在 DetailElement class
中呈现您的模板import React from 'react';
import Template from './template.jsx';
class DetailElement extends React.Component{
render = Template
};
export default DetailElement;
这是我创建的示例 codepen link 现在是一个 es6 class 特性,你可以在 class 之外定义 class 属性 或者你需要检查的 babel 转换器