Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert react component into web component #27

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified bun.lockb
Binary file not shown.
1 change: 1 addition & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
</head>
<body>
<div id="root"></div>
<wc-button children="Click Me"></wc-button>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

잉? children="Click Me"는 의도하신 건가요?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 현재 Button 컴포넌트 안에서 아래와 같이 children으로 문자를 받아 출력하게끔 지정되어 있습니다.

const WcButton = r2wc(Button, {
  props: {
    children: "string",
  },
});

예를들어 <wc-button>Click Me</wc-button> 이와 같이 작성하면 버튼 안에 Click Me가 출력되지 않습니다.

@r2wc props type은 여기에서 찾아볼 수 있습니다.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<wc-button>Click Me</wc-button>을 되게 만드는 방법은 없나요? children 속성은 상당히 어색하고 일반적으로 예상하기 어려운 API가 될 것 같습니다. Web 컴포넌트와 React 컴포넌트의 API와 최대한 일치해야지 이상적일 것 같아요.

<script type="module" src="/src/main.tsx"></script>
</body>
</html>
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"prepare": "panda codegen"
},
"dependencies": {
"@r2wc/react-to-web-component": "^2.0.4",
"axe-playwright": "^2.0.3",
"chromatic": "^11.20.2",
"react": "^18.3.1",
Expand Down
14 changes: 13 additions & 1 deletion src/components/Button/Button.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import r2wc from "@r2wc/react-to-web-component";
import { css } from "../../../styled-system/css";

export interface ButtonProps {
Expand Down Expand Up @@ -46,10 +47,21 @@ export const Button = ({
"&:disabled": { opacity: 0.5 },
})}
type={type}
onClick={onClick}
onClick={() => {
console.log("Button clicked!");
onClick?.();
}}
{...rest}
>
{children}
</button>
);
};

const WcButton = r2wc(Button, {
props: {
children: "string",
},
});

customElements.define("wc-button", WcButton);
Loading