如何将组件对象传递给 React.js 中的容器?
How can I pass component object to container in React.js?
我的目标是在多个组件中重用 bootstrap 中的模态。我有一个问题,如何将组件传递给容器?
<ModalContainer
title="Password recovery"
body="<LoginRecoverForm someprophere='' />"
/>
这给出了一个错误:
Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object. Check the render method of `ModalLoginRecover`.
这是简单的容器:
import { Modal } from 'react-bootstrap/lib/'
var React = require('react')
var ModalContainer = React.createClass({
getInitialState() {
return { showModal: true };
},
close() {
this.setState({ showModal: false });
browserHistory.push('/login');
},
open() {
this.setState({ showModal: true });
},
render: function () {
return (
<div>
<Modal show onHide={this.close}>
<Modal.Header closeButton>
<Modal.Title>{this.props.title}</Modal.Title>
</Modal.Header>
<Modal.Body>
{this.props.body}
</Modal.Body>
</Modal>
{this.props.children}
</div>
)}});
module.exports = ModalContainer;
这是简单的组件:
import {Modal, HelpBlock, FormGroup, Button, FormControl } from 'react-bootstrap/lib/'
var React = require('react');
import { Router, ReactRouter, browserHistory } from 'react-router';
var ModalContainer = require('../../containers/ModalDialog')
function FieldGroup({ id, help, type, placeholder }) {
return (
<FormGroup controlId={id}>
<FormControl type={type} placeholder={placeholder} />
{help && <HelpBlock>{help}</HelpBlock>}
</FormGroup>
);
}
function LoginRecoverForm(){
return (
<form method="POST" action="">
<FieldGroup
id="formControlsEmail"
type="email"
placeholder="Enter your E-mail"
/>
<Button type="submit">Recover!</Button>
</form>
)};
var ModalLoginRecover = React.createClass({
render: function () {
return (
<div>
<ModalContainer
title="Password recovery"
body="<LoginRecoverForm someprophere='' />"
/>
</div>
)}});
module.exports = ModalLoginRecover;
您可以像这样将组件作为子组件传递:
<ModalContainer
title="Password recovery"
body=""><LoginRecoverForm someprophere='' />
</ModalContainer>
React 会将 LoginRecoveryForm
组件放在 ModalContainer{this.props.children}
的位置
尝试:
<ModalContainer
title="Password recovery"
body={(() => {return <LoginRecoverForm someprophere='' />})()}
/>
由于 JSX 只是 javascript,您可以将其作为 props 传入,就像任何 JS 表达式一样:
<ModalContainer
title="Password recovery"
body={<LoginRecoverForm someprophere=""/>}
/>
您可以简单地在标签之间插入组件。插入的组件将被视为默认的 children 道具。就像在这个示例代码中一样,<Container>
是我组件的父级,我正在尝试添加 <Routes>...</Routes>
作为它的子级。
const RouterProfile = () => {
return(
<Container>
<Routes>
<Route path="/" element={<ProfilePage />} />
</Routes>
</Container>
)
}
现在,您可以在下面的代码中看到,子组件是使用我们从父组件收到的 children prop 调用的。或者您可以登录控制台并查看您收到的参数是什么。
const Container = ({children}) => {
return(
<div className="d-flex flex-column" style={{width:"100vw", height:"100vh"}}>
<div class="flex-grow-1" style={{overflow : "scroll"}}>
{children}
</div>
</div>
)
}
我的目标是在多个组件中重用 bootstrap 中的模态。我有一个问题,如何将组件传递给容器?
<ModalContainer
title="Password recovery"
body="<LoginRecoverForm someprophere='' />"
/>
这给出了一个错误:
Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object. Check the render method of `ModalLoginRecover`.
这是简单的容器:
import { Modal } from 'react-bootstrap/lib/'
var React = require('react')
var ModalContainer = React.createClass({
getInitialState() {
return { showModal: true };
},
close() {
this.setState({ showModal: false });
browserHistory.push('/login');
},
open() {
this.setState({ showModal: true });
},
render: function () {
return (
<div>
<Modal show onHide={this.close}>
<Modal.Header closeButton>
<Modal.Title>{this.props.title}</Modal.Title>
</Modal.Header>
<Modal.Body>
{this.props.body}
</Modal.Body>
</Modal>
{this.props.children}
</div>
)}});
module.exports = ModalContainer;
这是简单的组件:
import {Modal, HelpBlock, FormGroup, Button, FormControl } from 'react-bootstrap/lib/'
var React = require('react');
import { Router, ReactRouter, browserHistory } from 'react-router';
var ModalContainer = require('../../containers/ModalDialog')
function FieldGroup({ id, help, type, placeholder }) {
return (
<FormGroup controlId={id}>
<FormControl type={type} placeholder={placeholder} />
{help && <HelpBlock>{help}</HelpBlock>}
</FormGroup>
);
}
function LoginRecoverForm(){
return (
<form method="POST" action="">
<FieldGroup
id="formControlsEmail"
type="email"
placeholder="Enter your E-mail"
/>
<Button type="submit">Recover!</Button>
</form>
)};
var ModalLoginRecover = React.createClass({
render: function () {
return (
<div>
<ModalContainer
title="Password recovery"
body="<LoginRecoverForm someprophere='' />"
/>
</div>
)}});
module.exports = ModalLoginRecover;
您可以像这样将组件作为子组件传递:
<ModalContainer
title="Password recovery"
body=""><LoginRecoverForm someprophere='' />
</ModalContainer>
React 会将 LoginRecoveryForm
组件放在 ModalContainer{this.props.children}
的位置
尝试:
<ModalContainer
title="Password recovery"
body={(() => {return <LoginRecoverForm someprophere='' />})()}
/>
由于 JSX 只是 javascript,您可以将其作为 props 传入,就像任何 JS 表达式一样:
<ModalContainer
title="Password recovery"
body={<LoginRecoverForm someprophere=""/>}
/>
您可以简单地在标签之间插入组件。插入的组件将被视为默认的 children 道具。就像在这个示例代码中一样,<Container>
是我组件的父级,我正在尝试添加 <Routes>...</Routes>
作为它的子级。
const RouterProfile = () => {
return(
<Container>
<Routes>
<Route path="/" element={<ProfilePage />} />
</Routes>
</Container>
)
}
现在,您可以在下面的代码中看到,子组件是使用我们从父组件收到的 children prop 调用的。或者您可以登录控制台并查看您收到的参数是什么。
const Container = ({children}) => {
return(
<div className="d-flex flex-column" style={{width:"100vw", height:"100vh"}}>
<div class="flex-grow-1" style={{overflow : "scroll"}}>
{children}
</div>
</div>
)
}