跳到主要内容

Web 组件源码

Web 组件源码,和 自定义 React 组件 的实现一致。

源码示例

js 实现

注意在 src/web/components/index.js 中要对外导出组件名同名的组件实例,例如 Button

参考示例:

src/web/components/button/index.js
import * as React from "react";
import * as PropTypes from "prop-types";
import "weui";
import "./index.css";

export default React.forwardRef(function Button(props, ref) {
const {
text,
size = "default",
type = "primary",
loading = false,
disabled = false,
plain = false,
events,
titleSlot,
...rest
} = props;

React.useImperativeHandle(
ref,
() => {
return {
methods: {
innermethod: () => {
console.log("调用组件内部方法");
},
},
};
},
[]
);

return (
<button
type={type}
size={size === "mini" ? "small" : "normal"}
disabled={disabled}
plain={plain}
onClick={events.customevent}
{...rest}
>
{loading && <i className="weui-loading" />}
{text || titleSlot}
</button>
);
});

Button.propTypes = {
/**
* 组件类型
*/
type: PropTypes.oneOf(["primary", "warn", "default"]),
/**
* 按钮大小
*/
size: PropTypes.oneOf(["default", "mini"]),
/**
* 是否禁用
*/
disabled: PropTypes.bool,

/**
* 加载中
*/
loading: PropTypes.bool,

/**
* 镂空
*/
plain: PropTypes.bool,

/**
* 按钮内容
*/
text: PropTypes.string,

/**
* 低码平台注入的事件触发器
*/
events: PropTypes.objectOf(PropTypes.func),
};

/**
* 默认属性
*/
Button.defaultProps = {
type: "primary",
size: "default",
};

样式配置

src/web/components/button/index.css
/* 本示例没有用到额外的样式,所以该文件为空。 */

源码参数说明

props

组件配置data 字段对应,用户在低代码编辑器 数据 栏里配置的参数,会被透传到该字段内。

props.style

平台保留字段,用户在低代码编辑器 样式 栏里配置的参数,会被透传到该字段内。

props.events

平台保留字段,和 组件配置events 字段对应,通过 props.events.$customevent 方法,在合适的时机触发自定义事件。