面试题答案
一键面试状态管理设计
- 本地状态:在Svelte组件中使用响应式变量来存储购物车中的商品列表和总价。例如,定义一个数组来存储购物车中的商品项,每个商品项包含商品ID、名称、价格、数量等信息,再定义一个变量存储总价。
<script>
let cartItems = [];
let totalPrice = 0;
</script>
- 后端同步:使用
fetch
等方式与后端API进行交互。在购物车数据发生变化(添加、移除商品或修改数量)时,调用API将购物车数据发送到后端进行同步。同时,在应用初始化时,从后端获取购物车数据来初始化本地状态。
事件处理逻辑设计
- 添加到购物车:当用户点击添加到购物车按钮时,将商品信息添加到
cartItems
数组中,并更新totalPrice
。然后调用后端API进行数据同步。
<script>
function addToCart(product) {
const existingItem = cartItems.find(item => item.id === product.id);
if (existingItem) {
existingItem.quantity++;
} else {
cartItems.push({...product, quantity: 1 });
}
updateTotalPrice();
syncCartWithBackend();
}
function updateTotalPrice() {
totalPrice = cartItems.reduce((acc, item) => acc + item.price * item.quantity, 0);
}
async function syncCartWithBackend() {
try {
await fetch('/api/cart', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(cartItems)
});
} catch (error) {
console.error('Error syncing cart with backend:', error);
}
}
</script>
- 从购物车移除:当用户点击从购物车移除按钮时,从
cartItems
数组中移除对应的商品项,并更新totalPrice
。然后调用后端API进行数据同步。
<script>
function removeFromCart(productId) {
cartItems = cartItems.filter(item => item.id!== productId);
updateTotalPrice();
syncCartWithBackend();
}
</script>
- 修改商品数量:当用户修改商品数量时,更新
cartItems
数组中对应商品项的数量,并更新totalPrice
。然后调用后端API进行数据同步。
<script>
function updateQuantity(productId, newQuantity) {
cartItems = cartItems.map(item => {
if (item.id === productId) {
item.quantity = newQuantity;
}
return item;
});
updateTotalPrice();
syncCartWithBackend();
}
</script>
总结
通过上述状态管理和事件处理逻辑的设计,可以确保购物车功能的数据一致性和响应式更新,同时实现与后端的数据同步。在实际应用中,还需考虑错误处理、性能优化等方面的问题。