gpt4 book ai didi

javascript - Reactjs 将动态组件添加到其他组件中

转载 作者:行者123 更新时间:2023-11-29 10:31:34 24 4
gpt4 key购买 nike

我正在尝试使用 reactjs 开发一个网络应用程序,但我遇到了问题。经过1天多的研究,我不知道该怎么做。

我想使用一个组件作为我页面的主要布局,添加其他组件以在其中显示。

在组件 Base2 中,子 props 包含另一个组件。

import React from 'react';
import PropTypes from 'prop-types';
import { Link, NavLink } from 'react-router-dom';

const Base2 = (child) => (

<div>
<div className="top-bar">
<div className="top-bar-left">
<NavLink to="/">React App</NavLink>
</div>

<div className="top-bar-right">
<Link to="/login">Log in</Link>
</div>

</div>

<child/> // HERE the dynamic component

</div>
);

export default Base2;

调用它的函数是:

const TestBase = ({props}) => {
return (<Base child={MyComponent}/>)
};

此外,MyComponent 可以是一个类,声明以下 2 个方法:

import React from 'react';
import LoginForm from '../components/LoginForm.jsx';

class MyComponent extends React.Component{
constructor(props) {
super(props);
...
}
render() {
return (
<LoginForm
onSubmit={this.processForm}
onChange={this.changeUser}
errors={this.state.errors}
user={this.state.user}
/>
);
}

}

export default LoginPage;

第二种方法:

import React from 'react';
import { Card, CardTitle } from 'material-ui/Card';

const MyComponent = {
render() {
return (<Card className="container">
<CardTitle title="React Application" subtitle="Home page." />
</Card>);
}
};

export default MyComponent ;

在我的测试中,只有第二种方法有效。第二种方法缺少“实例”(我猜是这样的东西)可能是问题所在?如何开发 Base2 组件来采用这两种类型的组件声明?

预先感谢您的帮助

最佳答案

首先像这样传递组件:

<Base child={<MyComponent/>}/>

然后通过 props.child 在 Base2 组件内render,按照您编写 Base2 组件的方式,child(只是参数名称)将具有 的值>props 不是直接在 props 中传递的组件。

这样写:

const Base2 = (props) => ( 
<div>
<div className="top-bar">
<div className="top-bar-left">
<NavLink to="/">React App</NavLink>
</div>

<div className="top-bar-right">
<Link to="/login">Log in</Link>
</div>
</div>

{props.child} //here

</div>
);

关于javascript - Reactjs 将动态组件添加到其他组件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44818541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com