引入小程序组件
ts
// src/app.config.ts
export default {
...
plugins: {
captcha: {
version: '2.1.2',
provider: 'wx2fe8d9a3cb888a99',
},
},
...
};
声明组件
ts
// src/app.config.ts
export default {
...
usingComponents: {
"t-captcha": "plugin://captcha/t-captcha"
},
...
};
或
ts
// src/pages/xxx/index.config.ts
export default {
...
usingComponents: {
"t-captcha": "plugin://captcha/t-captcha"
},
...
};
注意:页面中或者全局声明组件二选一,一般情况下在页面中引入。
demo
tsx
import { getCurrentInstance } from '@tarojs/taro';
import { forwardRef, useImperativeHandle } from 'react';
export type CaptchaRef = {
open: () => void;
};
type CaptchaProps = {
success: () => void;
onError: () => void;
};
const Captcha = forwardRef<CaptchaRef, CaptchaProps>((props, ref) => {
const { page } = getCurrentInstance();
const handlerOpen = () => {
const captcha: any = page?.selectComponent?.('#captcha');
try {
captcha?.show();
} catch (error) {
captcha?.refresh();
}
};
useImperativeHandle(ref, () => ({
open: handlerOpen,
}));
const handlerVerify = (ev) => {
if (ev.detail.ret === 0) {
props.success?.();
} else {
props.onError?.();
}
};
return (
<t-captcha
id="captcha"
onVerify={handlerVerify}
appId={process.env.CAPTCHA_APP_ID}
/>
);
});
export default Captcha;
global.d.ts配置
ts
// types/global.d.ts
declare global {
namespace JSX {
interface IntrinsicElements {
't-captcha': React.DetailedHTMLProps<
React.HTMLAttributes<HTMLElement>,
HTMLElement
> & {
appId?: string;
onVerify?: (e: CustomEvent<{ ret: any; ticket: string }>) => void;
};
}
}
}
使用ts后再使用小程序原生组件就会变得麻烦。