Введение

Я понимаю, что вам нужно динамически создавать некоторые элементы пользовательского интерфейса в функции рендеринга вашего компонента в React. Да! единственный способ - перебрать элементы, для этого вы можете использовать цикл for или функцию карты. Но реальный вопрос в том, разрешено ли нам делать это в React? К сожалению, не напрямую, вы можете столкнуться с некоторыми трудностями, особенно если у вас есть опыт работы с Angular. Вероятно, вы получали сообщение об ошибке неиспользуемое выражение, ожидалось присваивание или вызов функции, и теперь вы находитесь здесь, на этой странице, чтобы найти простое решение. Добиться этого не так уж и сложно, я объясню, как. Я надеюсь, вам понравится.

Задний план

У меня есть массив адресов, и мне нужно показать это в шаблоне печати, поэтому я подумал о создании отдельного компонента, который перебирает свойство элемента. И у каждого элемента массива есть свое свойство, и я хотел создать метки для каждого элемента. Здесь я собираюсь объяснить, как я это сделал.

Приступаем к кодированию

Во-первых, у меня есть интерфейс для свойств списка адресов, как показано ниже.

import { IAddressData } from "../../../interfaces/IAddressData";
export interface IAddressListProps {
    items: IAddressData[];
}

Теперь я создал компонент с именем PrintAddressList.tsx и написал некоторый код.

import * as React from "react";
import { IAddressListProps } from '../../detailPage/components/interfaces/IAddressListProps';
export class PrintAddressList extends React.Component<IAddressListProps, {}>{
  constructor(props: IAddressListProps) {
    super(props);
  }
  public render(): React.ReactElement<IAddressListProps> {
    return (
      <div>
      </div>
    );
  }
}

И мне нужно иметь свои собственные метки для каждого адреса внутри элемента div в функции рендеринга. Для этого я создал приватную функцию под названием createAddressCard, которая будет перебирать мои реквизиты и возвращать нужный мне HTML.

private createAddressCard = () => {
    let parent = [];
    this.props.items.map((address) => {
      parent.push(<div style={{ padding: '10px', border: '1px solid #ccc', margin: '5px' }}>
        <label>{config.colNames.addressList.clmnAddressType}: </label>
        <label>{address.Adressart}</label><br />
        <label>{config.colNames.addressList.clmnCompanyName}: </label>
        <label>{address.Firma}</label><br />
        <label>{config.colNames.addressList.clmnPlaceName}: </label>
        <label>{address.Ort}</label><br />
        <label>{config.colNames.addressList.clmnZipCode}: </label>
        <label>{address.PLZ}</label><br />
        <label>{config.colNames.addressList.clmnTelephone}: </label>
        <label>{address.Telefon}</label><br />
      </div>);
    });
    return parent;
  }

Теперь я могу легко вызвать эту функцию внутри функции рендеринга.

public render(): React.ReactElement<IAddressListProps> {
    return (
      <div>
        {this.createAddressCard()}
      </div>
    );
  }

Ниже приведен полный код компонента.

Вывод

В этом посте мы узнали, как мы можем повторять свойства наших компонентов внутри функции рендеринга в компоненте React для динамического создания пользовательских элементов.

Вы всегда можете подписаться на меня здесь, на Medium и в Twitter.





Твоя очередь. Что вы думаете?

Большое спасибо за чтение. Я пропустил что-нибудь, что, по вашему мнению, необходимо? Считаете ли вы этот пост полезным? Если да, пожалуйста, лайкните/поделитесь/похлопайте мне. Заранее спасибо.

С наилучшими пожеланиями
Сибиш Вену