React: почему эти базовые данные не заполняются в моем функциональном компоненте?

#reactjs #react-native #react-router

#reactjs #react-native #react-router

Вопрос:

Надеюсь, у вас все хорошо. Я работаю с функциональным компонентом и хочу заполнить его некоторыми базовыми данными из моей базы данных. У меня есть средний уровень, который, как я подтвердил, отправляет данные во внешний интерфейс (ASP.net ). Я могу видеть данные внутри самого функционального компонента в инструментах разработчика, но когда я пытаюсь отобразить данные из реквизитов в компонент, они отображаются как пустые. Как будто в переменных вообще ничего не было.

https://ibb.co/RDKv48m

Как вы можете видеть, данные находятся внутри самого функционального компонента. Код для функционального компонента:

 import React from "react";
import PropTypes from "prop-types";

const CompaniesList = ({ Companies }) => {
  return (
    <React.Fragment>
      <div className="height-equal equal-height-lg card">
        <div className="card-header">
          <h5>Companies List</h5>
        </div>
        <div className="card-body">
          <div className="user-status height-scroll custom-scrollbar">
            <table className="table table-borderless">
              <thead>
                <tr>
                  <th scope="col" className="pt-0">
                    Logo
                  </th>
                  <th scope="col" className="pt-0">
                    Company Name
                  </th>
                  <th scope="col" className="pt-0">
                    Industry
                  </th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <img src={Companies.logo} alt="logo"></img>
                  <td>{Companies.companyName}</td>
                  <td>fdfdf</td>
                </tr>
              </tbody>
            </table>
          </div>
        </div>
      </div>
    </React.Fragment>
  );
};

CompaniesList.propTypes = {
  Companies: PropTypes.shape({
    companyName: PropTypes.string,
    id: PropTypes.number,
    industry: PropTypes.string,
    logo: PropTypes.string,
    website: PropTypes.string,
  }),
};

export default CompaniesList;
  

Код для родительского компонента:

 import React from "react";
import getAll from "../../services/companyService";
import { withRouter } from "react-router-dom";
import PropTypes from "prop-types";
import CompaniesList from "./CompaniesList";
const _logger = logger.extend("Companies");

class Companies extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      Companies: {},
    };
  }
  componentDidMount = () => {
    this.getListCompanies();
  };

  getListCompanies = () => {
    getAll().then(this.listOfCompaniesSuccess);
  };

  listOfCompaniesSuccess = (config) => {
    let companyList = config.items;
    this.setState((prevState) => {
      return {
        ...prevState,
        Companies: companyList,
      };
    });
  };

  onCompListError = (errResponse) => {
    _logger(errResponse);
  };

  mapCompanies = (Companies) => (
    <CompaniesList Companies={Companies} key={Companies.id} />
  );

  render() {
    return (
      <React.Fragment>
        <div className="row">
          <div className="col">{this.mapCompanies(this.state.Companies)}</div>
        </div>
        <div className="Row">
          <div className="col">{this.state.Companies.companyName}</div>
        </div>
      </React.Fragment>
    );
  }
}

Companies.propTypes = {
  Companies: PropTypes.shape({
    companyName: PropTypes.string,
    id: PropTypes.number,
    industry: PropTypes.string,
    logo: PropTypes.string,
    website: PropTypes.string,
  }),
};

export default withRouter(Companies);
  

Я не очень продвинутый программист, но это очень простой фрагмент кода. Чего мне не хватает?

Ответ №1:

Ваш корпоративный реквизит — это массив, поэтому вы должны сопоставить каждый элемент со строкой таблицы.

 import React from "react";
import PropTypes from "prop-types";

const CompaniesList = ({ Companies }) => {
  return (
    <React.Fragment>
      <div className="height-equal equal-height-lg card">
        <div className="card-header">
          <h5>Companies List</h5>
        </div>
        <div className="card-body">
          <div className="user-status height-scroll custom-scrollbar">
            <table className="table table-borderless">
              <thead>
                <tr>
                  <th scope="col" className="pt-0">
                    Logo
                  </th>
                  <th scope="col" className="pt-0">
                    Company Name
                  </th>
                  <th scope="col" className="pt-0">
                    Industry
                  </th>
                </tr>
              </thead>
              <tbody>
                {Companies.map((Company) => (
                  <tr>
                    <img src={Company.logo} alt="logo"></img>
                    <td>{Company.companyname}</td>
                    <td>fdfdf</td>
                  </tr>
                ))}
              </tbody>
            </table>
          </div>
        </div>
      </div>
    </React.Fragment>
  );
};
  

Комментарии:

1. Я только что получил это и собирался опубликовать, несколько другим способом, но я думаю, что я собираюсь пойти с этим. Большое вам спасибо!

2. @Steve Всегда пожалуйста. Пожалуйста, отметьте вопрос как ответ. Просто установите флажок под стрелками вверх / вниз.