Requirements: Let’s talk about the requirements first, that is, we need to make the active page. The active page has a rule, and the content of the rule is configured by the BACKGROUND of the B end. The page is as follows

Implementation: need to use dangerouslySetInnerHTML attribute

Compared with other schemes, this attribute has the following advantages: 1. It supports the modification of rich text style. 2

Core code: index.tsx

  // Change the default styles in the image line
  (Taro as any).options.html.transformElement = (el) = > {
    if (el.nodeName === 'image') {
      el.setAttribute('mode'.'widthFix');
    }
    return el;
  };
  
  return (
    <View className='content'>
      <View className='text' dangerouslySetInnerHTML={{ __html: rule}} / >
    </View>
  );
Copy the code

If you also want to upload images, be sure to change mode, as it defaults to mode=”scaleToFill”, which will cause scaling and not achieve the desired effect. So the following code must be added. All the code is at the end

  // Change the default styles in the image line
  (Taro as any).options.html.transformElement = (el) = > {
    if (el.nodeName === 'image') {
      el.setAttribute('mode'.'widthFix');
    }
    return el;
  };
Copy the code

Here are the results:

Complete code:

index.ts

import { getUser, IglobalUser } from '@/utils/getUser';

import { View } from '@tarojs/components';
import Taro, { useRouter } from '@tarojs/taro';
import { useEffect, useState } from 'react';
import { getActivityRule } from '@/services/activity.service';
import './index.scss';

const Rule = () = > {
  const router = useRouter();
  const activityCode: string = router.params.activity_code || ' ';
  const [rule, setRule] = useState(' ');
  // Get the rule
  const getRule = async() = > {try {
      const globalUser: IglobalUser = await getUser();
      const { userId } = globalUser;
      const res = await getActivityRule({ activityCode, userId });
      if (res.status === 0) { setRule(res.result); }}catch (error) {}
  };
  useEffect(() = >{ getRule(); } []);// Change the default styles in the image line
  (Taro as any).options.html.transformElement = (el) = > {
    if (el.nodeName === 'image') {
      el.setAttribute('mode'.'widthFix');
    }
    return el;
  };

  return (
    <View className='content'>
      <View className='text' dangerouslySetInnerHTML={{ __html: rule}} / >
    </View>
  );
};
export default Rule;
Copy the code

index.scss

.content {
  .text {
    .h5-p {
      .h5-img {
        width: 100%;
        overflow: scroll;
        display: block; }}}}Copy the code