// Получаем список товаров непосредственно из бэкенда
export const fetchProducts = async () => {
const response = await fetch('/api/products');
return response.json();
};
// Список товаров (React)
import React, { useEffect, useState } from 'react';
import { fetchProducts } from './ProductService';
const ProductList = () => {
const [products, setProducts] = useState([]);
useEffect(() => {
fetchProducts().then(setProducts);
}, []);
return (
<div>
{products.map(product => (
<div key={product.id}>{product.name}</div>
))}
</div>
);
};
export default ProductList;
// Сервис корзины. Получаем данные непосредственно из бэкенда
export const fetchCartItems = async () => {
const response = await fetch('/api/cart');
return response.json();
};
// Корзина (Vue)
<template>
<div>
<div v-for="item in cartItems" :key="item.id">{{ item.name }}</div>
</div>
</template>
<script>
import { fetchCartItems } from './CartService';
export default {
data() {
return {
cartItems: []
};
},
created() {
fetchCartItems().then(data => {
this.cartItems = data;
});
}
};
</script> // UserService.ts
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class UserService {
constructor(private http: HttpClient) {}
getUserProfile() {
return this.http.get('/api/user/profile');
}
}
// UserProfileComponent.ts
import { Component, OnInit } from '@angular/core';
import { UserService } from './user.service';
@Component({
selector: 'app-user-profile',
template: `<div *ngIf="user">{{ user.name }}</div>`
})
export class UserProfileComponent implements OnInit {
user: any;
constructor(private userService: UserService) {}
ngOnInit() {
this.userService.getUserProfile().subscribe(data => {
this.user = data;
});
}
} EventBus.js:// EventBus.js
class EventBus {
constructor() {
this.events = {};
}
subscribe(eventName, callback) {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(callback);
}
publish(eventName, data) {
if (this.events[eventName]) {
this.events[eventName].forEach(callback => callback(data));
}
}
}
const eventBus = new EventBus();
export default eventBus;
// Список товаров (React)
import React, { useEffect, useState } from 'react';
import { fetchProducts } from './ProductService';
import eventBus from './EventBus';
const ProductList = () => {
const [products, setProducts] = useState([]);
useEffect(() => {
fetchProducts().then(setProducts);
}, []);
const addToCart = (product) => {
eventBus.publish('addToCart', product);
};
return (
<div>
{products.map(product => (
<div key={product.id}>
{product.name}
<button onClick={() => addToCart(product)}>Add to Cart</button>
</div>
))}
</div>
);
};
export default ProductList;
// Корзина (Vue)
<template>
<div>
<div v-for="item in cartItems" :key="item.id">{{ item.name }}</div>
</div>
</template>
<script>
import eventBus from './EventBus';
export default {
data() {
return {
cartItems: []
};
},
created() {
eventBus.subscribe('addToCart', (item) => {
this.cartItems.push(item);
});
}
};
</script>
// store.js
import { createStore } from 'redux';
const initialState = {
cart: [],
user: null
};
function rootReducer(state = initialState, action) {
switch (action.type) {
case 'ADD_TO_CART':
return { ...state, cart: [...state.cart, action.payload] };
case 'SET_USER':
return { ...state, user: action.payload };
default:
return state;
}
}
const store = createStore(rootReducer);
export default store;
// Список товаров (React)
import React, { useEffect, useState } from 'react';
import { fetchProducts } from './ProductService';
import { useDispatch } from 'react-redux';
const ProductList = () => {
const [products, setProducts] = useState([]);
const dispatch = useDispatch();
useEffect(() => {
fetchProducts().then(setProducts);
}, []);
const addToCart = (product) => {
dispatch({ type: 'ADD_TO_CART', payload: product });
};
return (
<div>
{products.map(product => (
<div key={product.id}>
{product.name}
<button onClick={() => addToCart(product)}>Add to Cart</button>
</div>
))}
</div>
);
};
export default ProductList; // Профиль пользователя (Angular)
import { Component, OnInit } from '@angular/core';
import { UserService } from './user.service';
import { useDispatch, useSelector } from 'react-redux';
@Component({
selector: 'app-user-profile',
template: `<div *ngIf="user">{{ user.name }}</div>`
})
export class UserProfileComponent implements OnInit {
user: any;
dispatch = useDispatch();
constructor(private userService: UserService) {}
ngOnInit() {
this.userService.getUserProfile().subscribe(data => {
this.dispatch({ type: 'SET_USER', payload: data });
});
this.user = useSelector(state => state.user);
}
// Корзина (Vue)
<template>
<div>
<div v-for="item in cartItems" :key="item.id">{{ item.name }}</div>
</div>
</template>
<script>
import { useSelector } from 'react-redux';
export default {
computed: {
cartItems() {
return useSelector(state => state.cart);
}
}
};
</script>