Я работаю над проектом, используя JavaScript. Без фреймворков. У меня есть код для добавления продукта в корзину, этот код работает, продукт добавляется в корзину. Но, нажав на кнопку, весь продукт исчезает со страницы, а также ссылки на корзину и выход на сайт. После обновления страницы продукт вместе со ссылками снова появляется. Я понимаю, что проблема в штате. Но я не понимаю, как это решить. Как сделать продукт не исчезнуть со страницы? < /P>
export class HomePage extends Component {
constructor() {
super();
this.template = template();
this.state = {
links: [
{
label: "Sign In",
href: ROUTES.singIn,
},
{
label: "My Cart",
href: ROUTES.singIn,
},
],
products: [],
orderCart: [],
};
}
setLinks = () => {
const { getUser } = useUserStore();
if (getUser()) {
this.setState({
links: [
{
label: "My Cart",
href: ROUTES.cart,
},
{
label: "LogOut",
href: ROUTES.logOut,
},
],
});
}
};
getProducts = () => {
apiService
.get("/products")
.then(({ data }) => {
this.setState({
...this.state,
products: mapResponseApiData(data),
});
})
};
addToCard = async ({ target }) => {
const btn = target.closest('.add-to-cart');
if (!btn) return;
const { id, price, name, img } = btn.dataset;
if (this.state.orderCart?.some(item => item.id === id)) {
useToastNotification({
message: 'This product is already in the cart.',
type: TOAST_TYPE.info });
return;
}
await apiService.patch(`/order/${id}`, { id, price, name, img });
this.setState(prev => ({ orderCart: [...(prev.orderCart || []), { id, price, name, img }] }));
useToastNotification({ message: 'Product in the cart!', type: TOAST_TYPE.success });
};
componentDidMount() {
this.setLinks();
this.getProducts();
this.addEventListener("click", this.addToCard);
}
componentWillUnmount() {
this.removeEventListener("click", this.addToCard);
this.getProducts();
}
}
customElements.define('home-page', HomePage);
< /code>
Ранее я использовал другой код для добавления продуктов: < /p>
addToCard = (e) => {
if (e.target.closest(".add-to-cart")) {
let price = e.target.parentElement.parentElement.dataset.price;
let name = e.target.parentElement.parentElement.parentElement.dataset.name;
let img = e.target.parentElement.parentElement.parentElement.dataset.img;
const cartItems = { price, name, img };
apiService.post("/order", cartItems).then(() => {
this.setState({
...this.state,
orderCart: this.state.orderCart?.concat(cartItems),
});
})
useToastNotification({
message: "Product in the cart!",
type: TOAST_TYPE.success,
});
}
};
< /code>
Этот код сработал. Продукт не исчез со страницы, таких проблем не было. Но была проблема с добавлением идентификатора в хранилище продукта. Поэтому мне пришлось переделать этот код.
для хранения продукта я использую Firebase (RTDB). < /P>
Подробнее здесь: https://stackoverflow.com/questions/797 ... -button-ja
Все продукты исчезают со страницы после нажатия кнопки «Добавить в корзину» (сценарий Java) ⇐ Javascript
Форум по Javascript
1758012860
Anonymous
Я работаю над проектом, используя JavaScript. Без фреймворков. У меня есть код для добавления продукта в корзину, этот код работает, продукт добавляется в корзину. Но, нажав на кнопку, весь продукт исчезает со страницы, а также ссылки на корзину и выход на сайт. После обновления страницы продукт вместе со ссылками снова появляется. Я понимаю, что проблема в штате. Но я не понимаю, как это решить. Как сделать продукт не исчезнуть со страницы? < /P>
export class HomePage extends Component {
constructor() {
super();
this.template = template();
this.state = {
links: [
{
label: "Sign In",
href: ROUTES.singIn,
},
{
label: "My Cart",
href: ROUTES.singIn,
},
],
products: [],
orderCart: [],
};
}
setLinks = () => {
const { getUser } = useUserStore();
if (getUser()) {
this.setState({
links: [
{
label: "My Cart",
href: ROUTES.cart,
},
{
label: "LogOut",
href: ROUTES.logOut,
},
],
});
}
};
getProducts = () => {
apiService
.get("/products")
.then(({ data }) => {
this.setState({
...this.state,
products: mapResponseApiData(data),
});
})
};
addToCard = async ({ target }) => {
const btn = target.closest('.add-to-cart');
if (!btn) return;
const { id, price, name, img } = btn.dataset;
if (this.state.orderCart?.some(item => item.id === id)) {
useToastNotification({
message: 'This product is already in the cart.',
type: TOAST_TYPE.info });
return;
}
await apiService.patch(`/order/${id}`, { id, price, name, img });
this.setState(prev => ({ orderCart: [...(prev.orderCart || []), { id, price, name, img }] }));
useToastNotification({ message: 'Product in the cart!', type: TOAST_TYPE.success });
};
componentDidMount() {
this.setLinks();
this.getProducts();
this.addEventListener("click", this.addToCard);
}
componentWillUnmount() {
this.removeEventListener("click", this.addToCard);
this.getProducts();
}
}
customElements.define('home-page', HomePage);
< /code>
Ранее я использовал другой код для добавления продуктов: < /p>
addToCard = (e) => {
if (e.target.closest(".add-to-cart")) {
let price = e.target.parentElement.parentElement.dataset.price;
let name = e.target.parentElement.parentElement.parentElement.dataset.name;
let img = e.target.parentElement.parentElement.parentElement.dataset.img;
const cartItems = { price, name, img };
apiService.post("/order", cartItems).then(() => {
this.setState({
...this.state,
orderCart: this.state.orderCart?.concat(cartItems),
});
})
useToastNotification({
message: "Product in the cart!",
type: TOAST_TYPE.success,
});
}
};
< /code>
Этот код сработал. Продукт не исчез со страницы, таких проблем не было. Но была проблема с добавлением идентификатора в хранилище продукта. Поэтому мне пришлось переделать этот код.
для хранения продукта я использую Firebase (RTDB). < /P>
Подробнее здесь: [url]https://stackoverflow.com/questions/79765997/all-products-disappear-from-the-page-after-clicking-the-add-to-cart-button-ja[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия