【发布时间】:2018-03-28 06:21:36
【问题描述】:
我正在为一个项目使用 React 和 Material UI,并且我正在实施付款方式。我基本上会支持不同类型的支付方式,根据用户选择的不同,我要显示一个表单,一旦用户填写表单并提交,我想返回到我之前的视图。我有一个看起来像这样的组件:
import React, { Component } from 'react';
import { List, ListItem } from 'material-ui';
import { Button } from '../../components';
import StripeForm from './stripe/form';
import PropTypes from 'prop-types';
class MyComp extends Component {
constructor(props) {
super(props);
this.state = {
paymentProviders: [],
indexOfClickedItem: -1,
};
this.onListItemClicked = this.onListItemClicked.bind(this);
this.onPayment = this.onPayment.bind(this);
}
onListItemClicked(paymentProvider, index) {
let paymentProviders = {
providerName: paymentProvider.ProviderName,
publicKey: paymentProvider.PublicKey,
};
this.setState({
paymentProviders: paymentProviders,
indexOfClickedItem: index,
});
}
onPayment() {
switch (this.state.paymentProviders.providerName) {
case "stripe":
// render the form for stripe payment
return ( <StripeForm /> );
case "paypal":
// render the form for paypal payment
default:
return null;
}
}
render() {
return (
<div>
<div>
<List>
{this.props.paymentProviders.map((pp, index) => {
return (
<ListItem key={pp.ProviderName}
primaryText={pp.ProviderName}
onClick={() => this.onListItemClicked(pp, index)}
/>
)
})}
</List>
</div>
<div>
<Button onClick={this.onPayment}
label="Pay" />
</div>
</div>
);
}
}
MyComp.propTypes = {
paymentProviders: PropTypes.array.isRequired,
};
export default MyComp;
因此,基本上,根据单击哪个 ListItem,我会更新状态中的 indexOfClickedItem,然后还会更新有关支付提供商的一些详细信息。但是,我主要想要实现的是,当我的按钮被点击时,取决于选择了哪个支付提供商(意味着之前点击/选择了哪个列表),我想渲染另一个组件。任何想法如何实现它?
【问题讨论】:
-
你可以使用React Router,尤其是
Switch -
所以你有选择,你也可以使用内联条件渲染来根据组件的状态隐藏和显示你的组件。
-
@fungusanthrax 代码示例非常受欢迎。
-
render() => { var show = this.state.modalIsOpen; return ( {show === true && <Modal /> } {show === false && <Modal2 /> } ) }参考这里:reactjs.org/docs/conditional-rendering.html -
@fungusanthrax 是的,我知道条件渲染的想法,但我不完全了解如何将其应用于我的场景,因为我需要仅在按钮单击时渲染新组件。
标签: reactjs