未捕获的TypeError:无法读取shopify购买库中未定义的属性'checkoutLineItemsAdd'

时间:2018-08-10 05:35:34

标签: reactjs react-native shopify shopify-template

我正在 react-native 应用程序中使用The Shopify Buy plugin进行访客结帐

但是我正面临这个问题(请参见下图)

issue

我也参考了https://github.com/Shopify/js-buy-sdk/issues/518作为解决方案,但是我的代码中没有这类问题。

请提供任何帮助。

我的代码

import Client from 'shopify-buy';

const client = Client.buildClient({
    storefrontAccessToken: my_token,
    domain: my_domain
});
export default class App extends Component {
   componentWillMount() {
      client.checkout.create().then((res) => {
         this.setState({
            checkout: res,
         });
      });
  }
  _handleAddToBagBtn = (variantID) => {  
      const checkoutId = this.state.checkout.id;  
      const lineItemsToAdd = [{'variantID': variantID, quantity: 1}];  
      client.checkout.addLineItems(checkoutId, lineItemsToAdd).then((checkout) => { 
        console.warn(checkout.lineItems);  
     });  
  }
}
render() {
   return (
      <TouchableOpacity onPress={() => this._handleAddToBagBtn(variantID)} >Click Here</TouchableOpacity>
   );
}

2 个答案:

答案 0 :(得分:1)

我今天使用Storefont API遇到了这个问题,但如下解决了该问题。

您需要使用与变量关联的variantId属性的Base64编码字符串,而不是直接使用graphql_api_id数字值。

未编码,看起来像这样:gid://shopify/ProductVariant/12434084921391。您可以从产品对象中获取它们,但也可以直接从数字variantId中创建它们。

在您的代码中,更改此功能:

_handleAddToBagBtn = (variantId) => {  
  const checkoutId = this.state.checkout.id;
  const lineItemsToAdd = [{
    variantId: window.btoa(`gid://shopify/ProductVariant/${variantId}`),
    quantity: 1
  }];  
  client.checkout.addLineItems(checkoutId, lineItemsToAdd).then((checkout) = { 
    console.warn(checkout.lineItems);  
 });  

}

请注意,我还将variantID更改为variantId,因为这是Shopify使用的标识符,而不是variantID

对于我来说,这消除了错误并返回了GraphQL模型。希望有帮助。

答案 1 :(得分:0)

在我看来,Client.buildClient()正在兑现承诺。您应该执行以下操作:

const client = Client.buildClient({
    storefrontAccessToken: my_token,
    domain: my_domain
})
.then((res) => {
  console.log(res);
})
.catch((err) => {
  console.log(err);
})

您可以检查是否收到有效的响应或错误,然后进行相应的操作。