当前位置:首页 > React

react结合antd实现sku

2026-01-27 12:22:23React

实现 React 与 Ant Design 结合的 SKU 功能

数据结构设计

SKU(Stock Keeping Unit)需要明确商品属性和组合关系。通常采用以下结构:

  • attributes: 商品属性(如颜色、尺寸)
  • skus: 具体 SKU 组合(如红色+XL)

示例数据结构:

const data = {
  attributes: [
    { name: '颜色', values: ['红色', '蓝色'] },
    { name: '尺寸', values: ['S', 'XL'] }
  ],
  skus: [
    { id: 1, attributes: { 颜色: '红色', 尺寸: 'S' }, stock: 10, price: 99 },
    { id: 2, attributes: { 颜色: '蓝色', 尺寸: 'XL' }, stock: 5, price: 129 }
  ]
}

属性选择器实现

使用 Ant Design 的 RadioSelect 组件构建属性选择器:

import { Radio, Card } from 'antd';

function AttributeSelector({ attributes, selected, onChange }) {
  return (
    <Card title="商品规格">
      {attributes.map(attr => (
        <div key={attr.name}>
          <h4>{attr.name}</h4>
          <Radio.Group
            value={selected[attr.name]}
            onChange={e => onChange(attr.name, e.target.value)}
          >
            {attr.values.map(value => (
              <Radio.Button key={value} value={value}>
                {value}
              </Radio.Button>
            ))}
          </Radio.Group>
        </div>
      ))}
    </Card>
  );
}

SKU 匹配逻辑

当用户选择属性后,需要匹配对应的 SKU:

function findMatchedSku(selected, skus) {
  return skus.find(sku => 
    Object.entries(selected).every(
      ([name, value]) => sku.attributes[name] === value
    )
  );
}

完整组件示例

import React, { useState } from 'react';
import { Card, Radio, Button, Tag, Divider } from 'antd';

function SkuSelector({ data }) {
  const [selected, setSelected] = useState({});
  const matchedSku = findMatchedSku(selected, data.skus);

  const handleAttributeChange = (name, value) => {
    setSelected(prev => ({ ...prev, [name]: value }));
  };

  return (
    <div>
      <AttributeSelector 
        attributes={data.attributes} 
        selected={selected}
        onChange={handleAttributeChange}
      />

      <Divider />

      {matchedSku ? (
        <div>
          <Tag color="green">库存: {matchedSku.stock}</Tag>
          <Tag color="orange">价格: ¥{matchedSku.price}</Tag>
          <Button type="primary">加入购物车</Button>
        </div>
      ) : (
        <Tag color="red">请选择完整规格</Tag>
      )}
    </div>
  );
}

禁用无库存选项

为提升用户体验,可以禁用无库存的属性组合:

function getDisabledValues(attributes, skus, currentSelected) {
  const disabledValues = {};

  attributes.forEach(attr => {
    disabledValues[attr.name] = attr.values.filter(value => {
      const testSelection = { ...currentSelected, [attr.name]: value };
      return !skus.some(sku => 
        Object.entries(testSelection).every(
          ([name, val]) => sku.attributes[name] === val
        )
      );
    });
  });

  return disabledValues;
}

样式优化

使用 Ant Design 的 Grid 和 Space 组件优化布局:

import { Row, Col, Space } from 'antd';

// 在 AttributeSelector 中替换布局
<Row gutter={[16, 16]}>
  {attributes.map(attr => (
    <Col span={24} key={attr.name}>
      <Space direction="vertical">
        <h4>{attr.name}</h4>
        <Radio.Group>
          {/* ... */}
        </Radio.Group>
      </Space>
    </Col>
  ))}
</Row>

价格区间显示

当存在多个 SKU 时,可以显示价格区间:

function getPriceRange(skus) {
  const prices = skus.map(sku => sku.price);
  return {
    min: Math.min(...prices),
    max: Math.max(...prices)
  };
}

响应式处理

针对移动端优化显示:

import { useBreakpoint } from 'antd';

function ResponsiveSku() {
  const screens = useBreakpoint();
  const isMobile = !screens.md;

  return (
    <Radio.Group size={isMobile ? 'small' : 'middle'}>
      {/* ... */}
    </Radio.Group>
  );
}

react结合antd实现sku

标签: reactantd
分享给朋友:

相关文章

react native 如何

react native 如何

安装 React Native 开发环境 确保系统已安装 Node.js(建议版本 16 或更高)。通过以下命令安装 React Native CLI 工具: npm install -g rea…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gree…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

如何运行react

如何运行react

运行 React 项目的步骤 安装 Node.js 和 npm 确保系统已安装 Node.js(包含 npm)。可通过官网 Node.js 下载并安装最新稳定版本。安装完成后,验证版本: node…

react 如何debug

react 如何debug

React 调试方法 使用 React Developer Tools React Developer Tools 是浏览器扩展,支持 Chrome 和 Firefox。安装后,可以在开发者工具中查看…

如何调试react

如何调试react

调试 React 应用的方法 使用 React Developer Tools 安装浏览器扩展(Chrome/Firefox),通过组件树查看组件状态、props 和 hooks。支持实时编辑 pro…