Я использую Плагин Shopify Buy в моем приложении реагировать-родной для проверки гостя
Но я столкнулся с проблемой (см. Изображение ниже)
Я также сослался на решение 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>
);
}
пожалуйста, посмотрите мой обновленный вопрос.
Мне кажется, что Client.buildClient()
возвращает обещание. Вы должны сделать что-то вроде этого:
const client = Client.buildClient({
storefrontAccessToken: my_token,
domain: my_domain
})
.then((res) => {
console.info(res);
})
.catch((err) => {
console.info(err);
})
Вы можете проверить, получаете ли вы правильный ответ или ошибку, и действовать соответственно.
Я пишу этот код, но получаю ошибку ниже: undefined is not a function(near'...}).then(function(res){...')
Что вы получите, если запишете в консоль client.checkout
внутри handleAddToBagBtn
? Или вы также можете использовать debugger
в первой строке функции.
Я нашел это: {"graphQLClient":{"typeBundle":{"types":{"QueryRoot":{"name":"QueryRoot","kind":"OBJECT","fieldBaseTypes":{"node":"Node","nodes":"Node","shop":"Shop"}.........
в коротком объекте graphQLClient
Замените const lineItemsToAdd = [{'variantID': variantID, quantity: 1}];
на const lineItemsToAdd = [{'variantId': variantID, quantity: 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. Спасибо за такой ответ! Официальная документация для Shopify JavaScript Buy SDK очень неполная и часто ошибочная. После целого дня попыток ознакомиться с документами и неудачных попыток я нашел это, и это сработало.
Рад, что помог вам @Azer - удачи в вашем проекте :)
Что здесь
client
? Откуда вы это берете?