2016-05-05 2 views
0

Люди, которые я использую для проверки информации о моей кредитной карте. После сбора данных пользователя и отправки их на мой backend я пытаюсь вызвать функцию из this.props для обновления состояния клиентской стороны, но «это» не имеет доступных реквизитов/состояний. Оформить изображение, чтобы увидеть область действия «this» в функции onToken. Есть ли способ доступа к реквизитам или функциям класса (например, onTokenThen) в onToken?Невозможно получить доступ к реквизитам в функции onToken

import React, { Component } from 'react'; 
import StripeCheckout from 'react-stripe-checkout'; 
import { Button } from 'react-bootstrap'; 
import Axios from 'axios'; 

export default class AddCustomer extends Component { 
    constructor (props, context){ 
    super(props, context); 
    this.onTokenThen = this.onTokenThen.bind(this); 
    }; 

    onToken(token) { 
    console.log('token', token); 
    debugger; // <-- 'this' 
    Axios({ 
     method: 'post', 
     url: '/api/v1/addCustomer', 
     data: { 
     stripeToken: token 
     } 
    }) 
    .then(this.props.addCustomerState) // <-- can't access props here 
    .catch(function (response) { 
     console.log(response); 
    }); 
    } 

    onTokenThen(customer){ 
    debugger; 
    } 

    render() { 
    let currentUser = this.props.activeUser.email; 
    return (
     <StripeCheckout 
      ... 
      token={this.onToken} 
      ... 
      <Button bsStyle="success"> 
      Add customer 
      </Button> 
     </StripeCheckout> 
    ); 
    } 
}; 

onToken scope

+0

'.then (ответ => this.props.addCustomerState (ответ))' – azium

+0

также в вашей визуализации функции 'маркер = {() => this.onToken()}' – azium

+0

Я дал ваше предложение и пока он делает доступным реквизит/состояние из этого, сам токен теряется. Но ваша идея побудила меня попробовать привязать метод onToken к решению проблемы. – Kunal

ответ

0

Связывание функции onToken к 'это' в конструктор решил проблему; теперь доступны функции токена и реквизита/класса.

constructor (props, context){ 
    super(props, context); 
    this.onToken = this.onToken.bind(this); // <-- makes available 'this' in onToken scope 
    }; 
Смежные вопросы