Remax 允许你在 React 组件中引用小程序的自定义组件。

以支付宝小程序的 Badge 组件为例:

  1. import React from 'react';
  2. import { View } from 'remax/alipay';
  3. import Badge from 'mini-antui/es/badge'; // 直接当成 React 组件引用,无需申明 useComponents
  4. export default () => (
  5. <View>
  6. <Badge>
  7. <View slot="inner">Remax</View>
  8. </Badge>
  9. </View>
  10. );

注意事项

请按照自定义组件的定义方式声明属性(并非所有组件都采用驼峰的方式命名属性)。

错误:

  1. import React from 'react';
  2. import { View } from 'remax/alipay';
  3. import VantIcon from 'vant-weapp/dist/icon';
  4. export default () => {
  5. const handleClick = () => {};
  6. return (
  7. <View>
  8. {/** vant-weapp 中 icon 的属性定义为 class-prefix, bindclick,所以应遵循其命名规则 */}
  9. <VantIcon
  10. name="close"
  11. classPrefix="custom-class-prefix"
  12. onClick={handleClick}
  13. />
  14. </View>
  15. );
  16. };

正确:

  1. import React from 'react';
  2. import { View } from 'remax/alipay';
  3. import VantIcon from 'vant-weapp/dist/icon';
  4. export default () => {
  5. const handleClick = () => {};
  6. return (
  7. <View>
  8. <VantIcon
  9. name="close"
  10. class-prefix="custom-class-prefix"
  11. bindclick={handleClick}
  12. />
  13. </View>
  14. );
  15. };

对于带有具名 slot 的组件,具名 slot 部分的最外层只能用 View 组件。

错误:

  1. import React from 'react';
  2. import { View } from 'remax/alipay';
  3. import Badge from 'mini-antui/es/badge';
  4. export default () => (
  5. <View>
  6. <Badge>
  7. <Text slot="inner">Remax</Text>
  8. </Badge>
  9. </View>
  10. );

正确:

  1. import React from 'react';
  2. import { View } from 'remax/alipay';
  3. import Badge from 'mini-antui/es/badge';
  4. export default () => (
  5. <View>
  6. <Badge>
  7. <View slot="inner">Remax</View>
  8. </Badge>
  9. </View>
  10. );

不能在小程序自定义组件上使用 “Spread Attributes”。

错误:

  1. import React from 'react';
  2. import { View } from 'remax/alipay';
  3. import Badge from 'mini-antui/es/badge';
  4. export default () => {
  5. const badgeProps = {
  6. text: 1,
  7. };
  8. return (
  9. <View>
  10. <Badge {...badgeProps}>
  11. <View slot="inner">Remax</View>
  12. </Badge>
  13. </View>
  14. );
  15. };

正确:

  1. import React from 'react';
  2. import { View } from 'remax/alipay';
  3. import Badge from 'mini-antui/es/badge';
  4. export default () => {
  5. return (
  6. <View>
  7. <Badge text={1}>
  8. <View slot="inner">Remax</View>
  9. </Badge>
  10. </View>
  11. );
  12. };