本组件库使用 solidjs 开发,应用于使用 tauri、electron 开发的桌面软件,所以当前未实现message、notification、modal等反馈组件,这些组件可通过桌面开发框架调用系统 API 或创建多窗口实现。
组件以精简为主,绝不添加复杂功能,对复杂功能有需要的应该使用 antd、element-plus 等全功能组件库。
参考了一些 React 组件库的实现,包括:
所以这个组件库没有自己的设计风格,一切为了效率,对设计有需求可以自己修改组件样式。
代码:https://github.com/alley-rs/alley-components
在线示例:https://codesandbox.io/p/devbox/github/alley-rs/alley-components/tree/release?file=%2Fsrc%2FApp.tsx
基于此组件库开发的小软件:https://github.com/alley-rs/alley-transfer
版规要求上传代码,下面是组件库使用的一段示例代码:
import { createSignal, lazy } from "solid-js";
import { Button, FloatButton, Layout, Toast } from "alley-components"; // 直接导入
import { Dynamic } from "solid-js/web";
import DarkSwitchButton from "./DarkSwitch";
import { AiOutlineClose, AiOutlineDelete } from "solid-icons/ai";
// 使用 Dynamic 而不是路由加载 Layout.Content
const children = [
lazy(() => import("./components/buttons")),
lazy(() => import("./components/inputs")),
lazy(() => import("./components/tooltips")),
lazy(() => import("./components/progresses")),
lazy(() => import("./components/spinners")),
lazy(() => import("./components/alerts")),
lazy(() => import("./components/typographys")),
lazy(() => import("./components/toast")),
lazy(() => import("./components/list")),
];
const LazyMenu = lazy(() => import("alley-components/lib/components/menu")); // 懒加载导入
const menus = [
"按钮",
"输入",
"文字提示",
"进度条",
"加载中",
"警告",
"文本",
"轻提示",
"列表",
];
const App = () => {
const [index, setIndex] = createSignal(0);
const [toastOpen, setToastOpen] = createSignal(false);
return (
<>
<Layout
menu={
<LazyMenu
style={{ width: "160px" }}
defaultSelectedIndex={0}
items={menus.map((s, idx) => ({
children: s,
onClick: () => setIndex(idx),
}))}
/>
}
content={<Dynamic component={children[index()]} />}
/>
<Toast
message="已清空"
open={toastOpen()}
onClose={() => setToastOpen(false)}
action={
<Button
icon={<AiOutlineClose />}
type="plain"
shape="circle"
onClick={() => setToastOpen(false)}
danger
/>
}
/>
<FloatButton.Group>
<FloatButton.BackTop visibilityHeight={100} />
<DarkSwitchButton />
<FloatButton
danger
icon={<AiOutlineDelete />}
onClick={() => setToastOpen(true)}
/>
<FloatButton />
</FloatButton.Group>
</>
);
};
export default App;