我爲項目使用了React和Material UI,並且正在實施付款方式。我基本上會支持不同類型的付款方式,並根據哪一個用戶選擇我想要顯示的表單,一旦用戶填寫表單並提交表單,我想返回到以前的視圖。我有一個看起來像這樣的組件:如何渲染一個組件按鈕點擊React?
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;
所以,基本上,這取決於列表項被點擊更新我indexOfClickedItem
的狀態,然後同時更新有關的支付服務提供商的一些細節。但是,我主要想要實現的是,當點擊我的按鈕時,取決於選擇哪個支付提供者(意味着先前單擊/選擇了哪個列表),我想呈現另一個組件。任何想法如何實現它?
你可以使用[React Router](https://reacttraining.com/react-router/web/guides/philosophy),特別是'Switch' – Dane
所以你有選擇,你也可以使用內聯條件渲染來隱藏和顯示您的組件基於組件的狀態。 – fungusanthrax
@fungusanthrax代碼示例非常受歡迎。 – typos