Reactjs:如何将html模板放在单独的文件中?
我是新来的。我更熟悉Angular2+。在Angular中,每个组件都有一个单独的html文件。然而,在React中,我看到呈现函数本身包含html模板。比如说,Reactjs:如何将html模板放在单独的文件中?,reactjs,Reactjs,我是新来的。我更熟悉Angular2+。在Angular中,每个组件都有一个单独的html文件。然而,在React中,我看到呈现函数本身包含html模板。比如说, import React, { Component } from 'react'; class HelloWorld extends Component { render() { return ( <h2> Hello World </h2> )
import React, { Component } from 'react';
class HelloWorld extends Component {
render() {
return (
<h2> Hello World </h2>
);
}
}
export default HelloWorld;
你知道怎么做吗?在React中,您通常会创建一个子组件并将其导入父组件
因为这里的子组件只是静态标记,即
helloworld
,所以不需要担心组件状态
因此,您可以执行以下操作:
HelloWorldText
,作为示例HelloWorld
您的功能组件将如下所示: HelloWorldText.js
import React, { Component } from 'react';
import {SigninJsx} from './Signin.jsx';
export class Signin extends Component {
constructor(props){
super(props);
this.handleEmailChange = this.handleEmailChange.bind(this);
this.handlePasswordChange = this.handlePasswordChange.bind(this);
this.state = {
email:'',
password:''
};
this.signIn = this.signIn.bind(this)
}
handleEmailChange(e){
this.setState({email:e.target.value})
console.log("Error Change");
}
handlePasswordChange(e){
this.setState({password:e.target.value})
}
signIn(){
alert('Email address is ' + this.state.email + ' Password is ' + this.state.password);
}
render() {
return (
<SigninJsx />
)
}
}
const HelloWorldText=()=>(Hello World);
导出默认HelloWorldText;
然后将此功能组件
HelloWorldText
导入父组件HelloWorld
,如下所示:
HelloWorld.js
import React, { Component } from 'react';
import {SigninJsx} from './Signin.jsx';
export class Signin extends Component {
constructor(props){
super(props);
this.handleEmailChange = this.handleEmailChange.bind(this);
this.handlePasswordChange = this.handlePasswordChange.bind(this);
this.state = {
email:'',
password:''
};
this.signIn = this.signIn.bind(this)
}
handleEmailChange(e){
this.setState({email:e.target.value})
console.log("Error Change");
}
handlePasswordChange(e){
this.setState({password:e.target.value})
}
signIn(){
alert('Email address is ' + this.state.email + ' Password is ' + this.state.password);
}
render() {
return (
<SigninJsx />
)
}
}
import React,{Component}来自'React';
将HelloWorldText从“/path/导入到/HelloWorldText”;
类HelloWorld扩展组件{
render(){
返回(
);
}
}
导出默认HelloWorld;
下面是一个带有此代码的 不幸的是,在CodePen上,您无法导出和导入组件,但希望它仍能让您了解如何在父组件中使用子组件
注意:在React中,您希望组件尽可能通用。您可能最终会生成一个
Text
组件,而不是HelloWorldText
组件
然后,您可以使用道具将文本动态地传递到text
组件中
这是一个正在运行的。您可以将JSX部件移动到一个单独的文件中,并将该文件导入到组件类中
这里有一个例子
签名jsx
import React from 'react';
export const SigninJsx = () => {
return (
<div className="container">
<form className="form-signin">
<h2 className="form-signin-heading"> Please sign in </h2>
<br />
<label htmlFor="inputEmail" className="sr-only"> Email address
</label>
<input type="email" id="inputEmail" onChange={this.handleEmailChange} className="form-control" placeholder="Email address" required autoFocus />
<br />
<label htmlFor="inputPassword" className="sr-only"> Password</label>
<input type="password" id="inputPassword" onChange={this.handlePasswordChange} className="form-control" placeholder="Password" required />
<br />
<button className="btn btn-lg btn-primary btn-block" onClick={this.signIn} type="button"> Sign in
</button>
</form>
</div>
)
}
从“React”导入React;
导出常量符号jsx=()=>{
返回(
请登录
电子邮件地址
密码
登录
)
}
Signin.js
import React, { Component } from 'react';
import {SigninJsx} from './Signin.jsx';
export class Signin extends Component {
constructor(props){
super(props);
this.handleEmailChange = this.handleEmailChange.bind(this);
this.handlePasswordChange = this.handlePasswordChange.bind(this);
this.state = {
email:'',
password:''
};
this.signIn = this.signIn.bind(this)
}
handleEmailChange(e){
this.setState({email:e.target.value})
console.log("Error Change");
}
handlePasswordChange(e){
this.setState({password:e.target.value})
}
signIn(){
alert('Email address is ' + this.state.email + ' Password is ' + this.state.password);
}
render() {
return (
<SigninJsx />
)
}
}
import React,{Component}来自'React';
从“./Signin.jsx”导入{SigninJsx};
导出类签名扩展组件{
建造师(道具){
超级(道具);
this.handleEmailChange=this.handleEmailChange.bind(this);
this.handlePasswordChange=this.handlePasswordChange.bind(this);
此.state={
电子邮件:“”,
密码:“”
};
this.signIn=this.signIn.bind(this)
}
handleEmailChange(电子邮件){
this.setState({email:e.target.value})
控制台日志(“错误更改”);
}
handlePasswordChange(e){
this.setState({密码:e.target.value})
}
签名(){
警报('电子邮件地址为'+this.state.Email+'密码为'+this.state.Password');
}
render(){
返回(
)
}
}
请结帐
这将是您的React组件声明和
您需要在此处导入template.js文件,并在组件“Abc”(index.jsx)的上下文中呈现它:
单独的js文件将具有如下模板(template.js):
目前,无法从html文件加载模板。通过保持组件的小型和轻量级,并将逻辑提取到智能组件中,应该不需要这样做。这是react开发人员有意的选择。你想这样做有什么特别的原因吗?或者仅仅是因为习惯?相关:是的,答案解释得很好,但是仍然有没有办法导入HTML文件而不是直接在render方法中编写代码?我认为要做到这一点,你必须使用React的道具。这说明了如何执行此操作。*很遗憾,在CodePen上,您无法导出和导入组件”。。但是,使用Codesandbox,您可以:谢谢。当我尝试从模板(sign.jsx)引用[This.state.email]时,我收到一个错误,指出[This]未定义。如果我尝试引用[state.email],也会发生类似的情况.你知道为什么吗?如果你用这个,你可以用这个来代替看这个
import template from './template';
export default class Abc extends React.Component {
render() {
return template.call(this)
}
}
import styles from './styles.module.css';
const template = () => (
<div className={styles.outerContainer}>
<div className={styles.middleContainer}>
<div className={styles.innerContainer}>Hello, World</div>
</div>
</div>
);
export default template;
.outerContainer {
backgroundColor: red;
}
/* etc... etc... */