Ничего не было возвращено из рендера в React JS - PullRequest
0 голосов
/ 11 апреля 2020

Я делаю вызов для API (подделка, только для тестирования), но я получаю сообщение об ошибке при его вызове. Это мой код вызова

class Pacientes extends React.Component {
  state = {
    loading: true,
    error: null,
    data: undefined,
  };  

  componentDidMount() {
    this.fetchData();
  }

  fetchData = async () => {
    this.setState({ loading: true, error: null });

    try {
      const data = await api.pacientes.list();
      this.setState({ loading: false, data: data });
    } catch (error) {
      this.setState({ loading: false, error: error });

    }
  };

  render() {
    if (this.state.loading === true && !this.state.data)
      return (
        <PageLoading/>
      );

    if (this.state.error) return (
      `Este fue el error ${this.state.error}`
    );

    return (
      <React.Fragment>
        <TableHeader elementos={this.state.data} />
        <Table pacientes={this.state.data} />
      </React.Fragment>
    );
  }
}

И консоль говорит, что ошибка находится на следующей строке:

this.setState ({loading: false, data: data});

Но я думаю, что нет. Затем, сделайте вызов API, я вызываю компонент и задаю реквизиты ответа API (данных), и это компонент:

function useSearchPacientes(pacientes) {
  const [query, setQuery] = React.useState('');
  const [filteredPacientes, setFilteredPacientes] = React.useState(pacientes);

  React.useMemo(() => {
    const result = pacientes.filter(paciente => {
      return (
        `${paciente.firstName} ${paciente.lastName}`
      )
        .toLowerCase()
        .includes(query.toLowerCase());
    });

    setFilteredPacientes(result);
  }, [pacientes, query]);

  return { query, setQuery, filteredPacientes };
}

function Table(props) {
  const pacientes = props.pacientes;

  const { query, setQuery, filteredPacientes } = useSearchPacientes(pacientes);

  if (filteredPacientes.length === 0) {
    return (
      "No se encontraron resultados"
    );

    return (
      <React.Fragment>
          <div className="search-container">
            <form className="search-input-container">
              <input type="text" className="search-input form-control" placeholder="Buscar"
                value={query}
                onChange={(e) => {
                  setQuery(e.target.value);
                }}
              />
              <FontAwesomeIcon icon={faSearch} className="text-muted search-input-icon"/>
            </form>
            <div className="options">
              <select name="" className="form-control" id="">
                <option value=""></option>
                <option value=""></option>
                <option value=""></option>
              </select>
            </div>
          </div>
        <br />
        <div className="row justify-content-center">
          <div className="col-10 table-container border-primary">
            <br />
            <table className="table rounded table-responsive-md">
              <thead>
                <tr>
                  <th scope="col">Id</th>
                  <th scope="col">Nombre</th>
                  <th scope="col">Apellido</th>
                  <th scope="col">Twitter</th>
                  <th scope="col" className="text-center">
                    Opciones
                  </th>
                </tr>
              </thead>
              <tbody>
                {filteredPacientes.map(paciente => {
                  return (
                    <tr key={paciente.id}>
                      <TableRow paciente={paciente} />
                    </tr>
                  );
                })}
              </tbody>
            </table>
          </div>
        </div>
        <br />
      </React.Fragment>
    );
  }
}

Итак, тогда я не могу найти эту ошибку, я не могу нашел реальное решение, но я действительно думаю, что ошибка во втором компоненте, рядом с функцией map для массива.

1 Ответ

1 голос
/ 11 апреля 2020

Вы неправильно использовали закрывающую фигурную скобку для условия if

function Table(props) {
  const pacientes = props.pacientes;

  const { query, setQuery, filteredPacientes } = useSearchPacientes(pacientes);

  if (filteredPacientes.length === 0) {
    return (
      "No se encontraron resultados"
    );
  } // the closing bracket should be here
    return (
      <React.Fragment>
          <div className="search-container">
            <form className="search-input-container">
              <input type="text" className="search-input form-control" placeholder="Buscar"
                value={query}
                onChange={(e) => {
                  setQuery(e.target.value);
                }}
              />
              <FontAwesomeIcon icon={faSearch} className="text-muted search-input-icon"/>
            </form>
            <div className="options">
              <select name="" className="form-control" id="">
                <option value=""></option>
                <option value=""></option>
                <option value=""></option>
              </select>
            </div>
          </div>
        <br />
        <div className="row justify-content-center">
          <div className="col-10 table-container border-primary">
            <br />
            <table className="table rounded table-responsive-md">
              <thead>
                <tr>
                  <th scope="col">Id</th>
                  <th scope="col">Nombre</th>
                  <th scope="col">Apellido</th>
                  <th scope="col">Twitter</th>
                  <th scope="col" className="text-center">
                    Opciones
                  </th>
                </tr>
              </thead>
              <tbody>
                {filteredPacientes.map(paciente => {
                  return (
                    <tr key={paciente.id}>
                      <TableRow paciente={paciente} />
                    </tr>
                  );
                })}
              </tbody>
            </table>
          </div>
        </div>
        <br />
      </React.Fragment>
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...