gpt4 book ai didi

reactjs - 带 Icon 组件的按钮

转载 作者:行者123 更新时间:2023-12-03 14:07:17 25 4
gpt4 key购买 nike

我有一个<Button />组件和<Icon/>组件。

我尝试实现一个带有图标的按钮。

Button.jsx故事:

import React from "react";
import { storiesOf } from "@storybook/react";
import Button from "../components/Button";
import Icon from "../components/Icon/Index";
import { iconTypes } from "../components/Icon/Index";

storiesOf("Button/Primary", module)
.add("With icon", () => (
<Button><Icon type={iconTypes.arrowRight}/></Button>
))

效果很好,但我希望带有图标的 Button 的 api 是-

<Button icon={icons.arrow}>Click Me</Button>

我怎样才能实现这一目标?

Icon.jsx故事:

import React from "react";
import { storiesOf } from "@storybook/react";
import Icon from "../components/Icon/Index";
import { iconTypes } from "../components/Icon/Index";

storiesOf("Icon", module)
.add("Arrow Right", () => (
<Icon type={iconTypes.arrowRight}>
</Icon>
))
.add("Arrow Left", () => (
<Icon type={iconTypes.arrowLeft}>
</Icon>
));

<Button />组件:

import React from 'react';
import { css, cx } from 'emotion';

import colors from '../styles/colors';

export default function Button({
children,
...props
}) {
const mergedStyles = cx(
// css
);
// other css stuff
return (
<button {...props} disabled={disabled} className={mergedStyles}>
{children}
</button>
);

<Icon />组件:

import React from "react";
import { css } from 'emotion';

import ArrowRight from "./arrow-right2.svg";
import ArrowLeft from "./arrow-left2.svg";

export const iconTypes = {
arrowRight: 'ARROW_RIGHT',
arrowLeft: 'ARROW_LEFT',
}

const iconSrc = {
ARROW_RIGHT: ArrowRight,
ARROW_LEFT: ArrowLeft,
}


const circleStyles = css({
width: 24,
height: 24,
borderRadius: "50%",
backgroundColor: "#f7f7f9",
display: "flex",
justifyContent: "center"
});


export default function Icon({ type }) {
return (
<div className={circleStyles}>
<img src={iconSrc[type]} />
</div>
)
};

如有任何帮助,我们将不胜感激。

最佳答案

    import React from 'react';
import {css, cx} from 'emotion';
import colors from '../styles/colors';

//import your ICON component & make sure your path is right
import Icon from "./../Icon";

export default function Button({
children,
disabled,
icon,
...props
}) {

const mergedStyles = cx(//your css);

return (
<button {...props} disabled={disabled} className={mergedStyles}>

// If icon prop is provided then render ICON component
{icon && <Icon type={icon}/>}

//Other children
{children}

</button>
);
}

关于reactjs - 带 Icon 组件的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52697730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com