他の子と一緒にPaymentForm
という子コンポーネントをレンダリングする親コンポーネントがあります。私はそうのような小道具を経由して子供にpaymentSucceeded
と呼ばれるコールバック関数を渡していますAPIコールが返された後に子コンポーネントがその小道具を失うのはなぜですか?
:
// this is in the render method of the parent
<PaymentForm
paymentSucceeded={() => {
this._postJob()
}}/>
PaymentForm
は、クレジットカードのトランザクションを実行するためにストライプのAPIを使用して、正常に終了すれば、コールバックpaymentSucceeded
を呼び出す必要があります。ただし、お支払いが正常に実行された時点で、PaymentForm
のthis.props
はundefined
となり、私は理由を知りません。
export default class PaymentForm extends React.Component {
constructor(props) {
super(props)
console.log('PaymentForm - constructor - props: ', props) // (1)
}
_receiveCreditCardInfo(creditCardDetails) {
const creditCardInfo = {creditCardInfo: creditCardDetails}
console.log('PaymentForm - _receiveCreditCardInfo - props: ', this.props) // (2)
fetch(url, {
method: 'POST',
headers: new Headers({
'Content-Type': 'application/json'
}),
body: JSON.stringify(creditCardInfo)
}).then((data) => {
this.props.paymentSucceeded() // this doesn't work bc this.props is undefined
}).catch((error) => {
})
}
render() {
return (
<StripeCheckout
token={this._receiveCreditCardInfo}
stripeKey={STRIPE_TEST_API_KEY} />
)
}
}
最初のログ(1)
は正しく機能paymentSucceeded
、しかし第二ログ(2)
プリント小道具用undefined
と共にprops
オブジェクトを印刷します。したがって、私は、エラーメッセージが表示されます:
TypeError: Cannot read property
paymentSucceeded
ofundefined
何それはクラスメソッドとして: '_receiveCreditCardInfo =(creditCardDetails)=> {/ * ... * /};'? –
あなたは何を意味するのか確信していません! '_receiveCreditCardInfo =(creditCardDetails)=> {...}'のように '_receiveCreditCardInfo'を再宣言できます。私はそれを 'PaymentForm'クラスのスコープ内で行うべきでしょうか?私は残りの部分をそのまま残すべきですか? (sry私はjsの経験がたくさんありません) – nburk
ha私は実際にそれを解決した、あなたのヒントは私を助けた! – nburk