Reactjs 未捕获类型错误:无法读取属性';checkoutLineItemsAdd';shopify buy库中未定义的

Reactjs 未捕获类型错误:无法读取属性';checkoutLineItemsAdd';shopify buy库中未定义的,reactjs,react-native,shopify,shopify-template,Reactjs,React Native,Shopify,Shopify Template,我在我的react native应用程序中使用客人结账 但我面临着这个问题(见下图) 我也参考了解决方案,但我的代码中没有这种类型的问题 请帮忙,谢谢 我的代码 import Client from 'shopify-buy'; const client = Client.buildClient({ storefrontAccessToken: my_token, domain: my_domain }); export default class App extends C

我在我的react native应用程序中使用客人结账

但我面临着这个问题(见下图)

我也参考了解决方案,但我的代码中没有这种类型的问题

请帮忙,谢谢

我的代码

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>
   );
}
从“shopify buy”导入客户端;
const client=client.buildClient({
storefrontAccessToken:my_token,
域名:我的域名
});
导出默认类应用程序扩展组件{
组件willmount(){
client.checkout.create()。然后((res)=>{
这是我的国家({
结帐:res,
});
});
}
_HandleadTobagbtn=(variantID)=>{
const checkout id=this.state.checkout.id;
const lineItemsToAdd=[{'variantID':variantID,数量:1}];
client.checkout.addLineItems(checkoutId,lineItemsToAdd)。然后((checkout)=>{
console.warn(checkout.lineItems);
});  
}
}
render(){
返回(
点击这里
);
}

在我看来,
Client.buildClient()
正在返回一个承诺。你应该这样做:

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

您可以检查您是否得到了有效的响应或错误,然后继续相应的操作。

在我看来,
Client.buildClient()
正在返回一个承诺。你应该这样做:

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

您可以检查您是否得到了有效的响应或错误,然后继续相应的操作。

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

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

未编码的,如下所示:
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模型。希望能有所帮助。

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

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

未编码的,如下所示:
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模型。希望有帮助。

这里的
客户端是什么?你从哪里得到的?请看一下我更新的问题。这里的
客户端是什么?你是从哪里得到它的?请看一下我更新过的问题。我写了这段代码,但我得到以下错误:
undefined不是一个函数(靠近“…”)。然后(函数(res){…)
如果您在控制台中登录
客户端。签出
handleAddToBagBtn
?或者您也可以在函数的第一行中使用
调试器
。我发现:
{“graphQLClient”:{“typeBundle”:{“types”:{“QueryRoot”:{“name”:“QueryRoot”,“kind”:“OBJECT”,“fieldBaseTypes”:{“node”:“node”,“nodes”:“nodes”:“nodes”,“shop”:”“Shop”}……
inshort-graphQLClient-objectReplace
const-lineItemsToAdd=[{'variantID':variantID,数量:1}];
with
const-lineItemsToAdd=[{'variantID':variantID,数量:1}]
最有可能的问题是variantID。检查您是否获得了正确的Id并正确地传递了它。还有密钥。是的,我也尝试了这个拼写。但它给了我同样的警告我写了这个代码,但我得到了以下错误:
未定义不是一个函数(靠近“…”)。然后(函数(res){…)
如果您在控制台中记录
客户端。签出
handleAddToBagBtn
?或者您也可以在函数的第一行中使用
调试器
。我发现:
{“graphQLClient”:{“typeBundle”:{“types”:{“QueryRoot”:{“name”:“QueryRoot”,“kind”:“OBJECT”,“fieldBaseTypes”:{“node”:“node”,“nodes”:“nodes”:“nodes”,“shop”:”Shop“}………
inshort-graphQLClient-objectReplace
const-lineItemsToAdd=[{'variantID':variantID,数量:1}];
with
const-lineItemsToAdd=[{'variantID':variantID,数量:1}]
最有可能的问题是variantID。检查您是否获得了正确的Id并正确传递了它。还有密钥。是的,我也尝试了这个拼写。但它给了我同样的警告+1。感谢您的回答!Shopify JavaScript Buy SDK的官方文档非常不完整,而且经常出错。经过一天的尝试之后查看文档并失败,我发现了这一点,它成功了。很高兴它帮助您@Azer-祝您的项目好运:)+1。感谢您的回答!Shopify JavaScript Buy SDK的官方文档非常不完整,并且经常出错。在尝试查看文档并失败一天后,我发现了这一点,它成功了d、 很高兴它帮助了你@Azer-祝你的项目好运:)