javascript - Reactjs 向下传递 props 2 个组件
问题描述
在我的项目中,我有一个支付表单,它有条件地呈现 2 个 Stripe 元素(PaymentRequestForm.js 和 CheckoutForm.js),我已经将道具从主表单组件 FullfillRequest.js 传递到 PaymentRequestForm.js,但是我正在努力传递CheckoutForm.js 的相同道具。props 的作用是在 Stripe 支付完成后提交表单。
使用当前设置,错误是 this.props.setComplete() 在 CheckoutForm.js 中未定义。
完成请求.js
setComplete = val => {
this.setState({
complete: val
});
};
render() {
return <PaymentRequestForm
setComplete={this.setComplete}
complete={this.state.complete}
requestId={this.props.requestId}
/>
<Button disabled={loading || !this.state.complete} >
Fulfill Request
</Button>
}
PaymentRequestForm.js
class PaymentRequestForm extends React.Component {
constructor(props) {
super(props);
paymentRequest.on("token", async ev => {
const response = await fetch();
if (response.ok) {
this.props.setComplete(true);
}
});
this.state = {
canMakePayment: false,
paymentRequest,
complete: false
};
}
render() {
if (this.props.complete) return <h1>Purchase Complete</h1>;
return this.state.canMakePayment ? (
<PaymentRequestButtonElement />
) : (
<CheckoutForm
setComplete={this.setComplete}
complete={this.state.complete}
requestId={this.props.requestId}
/>
);
CheckoutForm.js
class CheckoutForm extends Component {
constructor(props) {
super(props);
this.state = { complete: false };
this.submit = this.submit.bind(this);
}
async submit(ev) {
let response = await fetch();
if (response.ok) {
this.props.setComplete(true);
}
}
render() {
if (this.props.complete) return <h1>Purchase Complete</h1>;
return (
<Button onClick={this.submit}>
Send
</Button>
);
}
}
任何帮助将不胜感激,谢谢!
解决方案
内部PaymentRequstForm
setComplete
可通过this.props.setComplete
not访问this.setComplete
(因为它来自FulfillRequest
)
render() {
if (this.props.complete) return <h1>Purchase Complete</h1>;
return this.state.canMakePayment ? (
<PaymentRequestButtonElement />
) : (
<CheckoutForm
setComplete={this.props.setComplete}
complete={this.state.complete}
requestId={this.props.requestId}
/>
);
推荐阅读
- powershell - 检查网站是否通过 PowerShell (5.1) 加载
- sql - 另一个表中存在单列行集或函数返回正值
- latex - 在 LaTeX 中设置 \newtheorem
- r - 是否有 R 函数来检查和删除数据框中的空字符串?
- angular - Rxjs 扫描不触发 combineLatest
- windows - 所有现有 WinApi 函数的列表
- android - Android:运行后台服务,无需运行应用程序。可能吗?
- r - 有条件地在其他变量的同一列中添加带有变量的行
- angular - 有什么方法可以在角度渲染中使用 *ngFor 的前 5 个结果并在浏览器中显示,其余的可以随着时间的推移加载
- python - 如何使用 python 访问谷歌驱动器中的 SQLite 数据库?