Компоненты, не отображаемые в React при создании в функции

#reactjs #devexpress #devextreme

#reactjs #devexpress #devextreme

Вопрос:

Я рендерю различные компоненты редактора DevExtreme, но при переразложении части моего кода и размещении каждого из редакторов в отдельные компоненты sfc или class, он больше не отображает компоненты.

Работает следующее:

 createFields(items) {
    return items.map((item) => {
        return (
            <SimpleItem
              key={item.itemId}
              dataField={item.fieldName} />
        );
    });
}
  

но следующее не:

 import CreateTextBox from "./../fields/createTextBox";
import CreateNumberBox from "./../fields/createNumberBox";

createFields(items) {
    return items.map((item) => {
        return this.createField(item);
    });
}

createField(item) {
    switch (item.type) {
        case "text":
            return <CreateTextBox item={item} key={item.itemId} />;
        case "numeric":
            return <CreateNumberBox item={item} key={item.itemId} />;
    }
}
  

и у меня есть отдельный файл для каждого из моих редакторов, содержащий следующее:

 import React from "react";
import { SimpleItem } from "../../../node_modules/devextreme-react/form";

const CreateTextBox = (item) => {     
    return (
       <SimpleItem key={item.itemId} 
                   dataField={item.fieldName} 
                   editorType='dxTextBox'
       />);
};

export default CreateTextBox;
  

Приведенное выше относится к редактору текстовых полей.

Обратите внимание, что преобразование sfc в класс не имело никакого значения.

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

Есть идеи?

Спасибо.

Ответ №1:

вам необходимо использовать реквизиты для входных свойств вашего компонента

 import React from "react";
import { SimpleItem } from "../../../node_modules/devextreme-react/form";

const CreateTextBox = (props) => {     
    return (
       <SimpleItem key={props.item?.itemId} 
                   dataField={props.item.fieldName} 
                   editorType='dxTextBox'
       />);
};

export default CreateTextBox;
  

или вы можете извлечь реквизиты в параметрах следующим образом:

 const CreateTextBox = ({item}) => {     
    return (
       <SimpleItem key={item?.itemId}