You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将primary传入button.tsx组件并用于style.ts的样式条件判断

实现步骤

1. 在button.tsx中定义并接收primary属性

先在Button组件里声明primary作为可选布尔型props,再把它传递给样式生成逻辑:

// button.tsx
import React from 'react';
import { getButtonStyles } from './button.style';

interface ButtonProps {
  primary?: boolean;
  children: React.ReactNode;
  // 按需添加其他props,比如onClick、disabled等
}

const Button: React.FC<ButtonProps> = ({ primary = false, children, ...rest }) => {
  const buttonStyles = getButtonStyles({ primary });
  
  return (
    <button style={buttonStyles} {...rest}>
      {children}
    </button>
  );
};

export default Button;

2. 在button.style.ts中基于primary编写条件样式

创建接收配置参数的样式函数,通过primary值切换按钮的颜色、边框等样式:

// button.style.ts
interface ButtonStyleConfig {
  primary: boolean;
}

export const getButtonStyles = ({ primary }: ButtonStyleConfig) => ({
  padding: '8px 16px',
  border: 'none',
  borderRadius: '4px',
  cursor: 'pointer',
  // 根据primary属性切换核心样式
  backgroundColor: primary ? '#165DFF' : '#FFFFFF',
  color: primary ? '#FFFFFF' : '#333333',
  border: primary ? 'none' : '1px solid #E5E6EB',
});

3. 调用Button组件生成不同样式按钮

在父组件中通过传入primary属性,快速生成两种风格的按钮:

// 父组件示例
import Button from './button';

const App = () => {
  return (
    <div style={{ gap: '12px', display: 'flex' }}>
      <Button primary>主按钮</Button>
      <Button>次要按钮</Button>
    </div>
  );
};

export default App;

可选:用styled-components实现的写法

如果项目使用styled-components,也可以直接在样式组件中接收primary属性:

// button.tsx
import styled from 'styled-components';

interface StyledButtonProps {
  primary?: boolean;
}

const StyledButton = styled.button<StyledButtonProps>`
  padding: 8px 16px;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  
  background-color: ${props => props.primary ? '#165DFF' : '#FFFFFF'};
  color: ${props => props.primary ? '#FFFFFF' : '#333333'};
  border: ${props => props.primary ? 'none' : '1px solid #E5E6EB'};
`;

const Button: React.FC<StyledButtonProps & React.ButtonHTMLAttributes<HTMLButtonElement>> = ({ primary, children, ...rest }) => {
  return <StyledButton primary={primary} {...rest}>{children}</StyledButton>;
};

export default Button;

内容的提问来源于stack exchange,提问作者inspiq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:05:24