Получение данных с помощью реакции и сопоставления

Я пытаюсь получить данные из вызова API с помощью реакции и сопоставить их, чтобы я мог перебирать список элементов. Проблема в том, что при получении с помощью response ничего не возвращается в списке, хотя при вызове API есть данные, может ли проблема быть связана с сопоставлением или с состоянием? Я включил столько кода, чтобы вы могли видеть от уровня представления к репозиторию, включая примеры данных, которые возвращаются в API. Я новичок, чтобы отреагировать, спасибо

Реагировать на код

import * as React from 'react';
import './PracticeAreas.css';

import IReportGroup from 'src/model/IReportGroup';

interface IOwnProps {
    callAction: any
}

interface IOwnState {
    groups: IReportGroup[]
}

class PracticeAreas extends React.Component<IOwnProps, IOwnState> {

    constructor(props: IOwnProps) {
        super(props);
        this.state = {
          groups: []
        }
      }

    public render() {

        return (
        <div className = "col-md-12 practiceAreas">
            <h1>Practice Areas</h1>
            <div className = "item-container plain-bg selection-refinement">
                <div className = "refinement-search">
                    <input type = "text" value = "" placeholder = "What are you looking for?" />
                </div>
            </div>

            <ul className = "list-inline groupedTags">
                {this.state.groups}
            </ul>
        </div>
        );
    }

    public groups() {
        fetch(`https://localhost:44301/api/v2/navigator/reports/groups`)
            .then((res) => res.json()
            .then((data) => { 
                const groups = data.results.map((group: IReportGroup) => {
                    return( <li key = {group.id}>{group.name}</li>
                )
        })
        this.setState({groups: groups});
        }))
    }
};

export default PracticeAreas

Вызов API

[Route("groups")]
[HttpGet]
public IList<NavigatorReportSelectionGroup> GetGroups()
{
    var groups = navigatorReportSelectionService.GetGroups();
    return groups.ToList();
}

Сервисный звонок

public IList<NavigatorReportSelectionGroup> GetGroups()
{
    var allTopicGroups = navigatorService.GetTopicGroups();

    return
        allTopicGroups.Select(x => new NavigatorReportSelectionGroup
        {
            Id = x.GroupId,
            Name = x.Name
        }).ToList();
}

Репо

public IEnumerable<NavigatorTopicGroup> GetTopicGroups()
{
    return navigatorTopicGroupRepository.GetAll();
}

Модель

public class NavigatorTopicGroup
{
    public Guid GroupId { get; set; }
    public string Name { get; set; }
}

Пример данных API

<NavigatorReportSelectionGroup>
    <Focused>false</Focused>
    <Id>a184e2c5-af49-413e-9747-06741e97a512</Id>
    <Name>Insurance & Reinsurance group</Name>
    <Order>0</Order>
    <Type>Topics</Type>
</NavigatorReportSelectionGroup>
<NavigatorReportSelectionGroup>
    <Focused>false</Focused>
    <Id>955e3e12-6e02-4e77-bcec-08b2fcb6f3e8</Id>
    <Name>Patents group</Name>
    <Order>0</Order>
    <Type>Topics</Type>
</NavigatorReportSelectionGroup>
<NavigatorReportSelectionGroup>
    <Focused>false</Focused>
    <Id>d21384b5-27be-4bfc-963d-0d2ad40dbbfb</Id>
    <Name>Employment: Canada group</Name>
    <Order>0</Order>
    <Type>Topics</Type>
</NavigatorReportSelectionGroup>

IReportGroup:

export default interface IReportGroup {
    id: string,
    type: ReportOptionType,
    name: string,
    order: number,
    focused: boolean
}

почему c# как тэг?

Stophface 17.12.2018 15:14

Я нигде не вижу вызываемой функции groups. Я что-то упускаю ?

Kabbany 17.12.2018 15:57

@Kabbany вынул слова из моего рта. Я тоже не видел, чтобы его вызывали ... иди

Bens Steves 17.12.2018 16:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
334
2

Ответы 2

В вашем fetch отсутствует заявление о возврате. Это частая ошибка, которую легко исправить.

Возьми это:

public groups() {
        fetch(`https://***`)
            .then((res) => res.json()
            .then((data) => { 
                const groups = data.results.map((group: IReportGroup) => {
                    return( <li key = {group.id}>{group.name}</li>
                )
        })
         this.setState({groups: groups});
        }))
    }

и настройте его так: (все, что я изменяю, это добавление отсутствующего оператора возврата)

groups() {
        fetch(`https://***`)
            .then(res => { return res.json(); })
            .then(data => { 
                const groups = data.results.map((group: IReportGroup) => {
                    return( <li key = {group.id}>{group.name}</li>
                )
                this.setState({groups});
        })
        }))
    }

Надеюсь это поможет.

Обновлять

В вашем источнике есть несколько областей, которые можно настроить. Я предполагаю, что у вас есть опыт работы с ООП. Вам не нужно объявлять свои функции как public или private.

Ваш setState выходит за рамки. Так что он ничего не устанавливает. Я не совсем уверен, к какому результату вы стремитесь ... но я бы просто назначил const group на data.results, а затем сразу же установил ваше состояние следующим образом:

const groups = data.results; 
this.setState({ groups }); 

Затем вы хотите отобразить этот массив там, где вы хотите, чтобы эти результаты были визуализированы. Я не уверен, что вы где-нибудь вызываете эту функцию. Ваш источник немного трудно читать, возможно, я его не заметил.

Я закончу на этом.

нет пропущенного возврата. Проверьте документация. Стрелочные функции автоматически возвращают все, что происходит после, если это не функция

Smarticles101 17.12.2018 15:22

Я никогда не видел, чтобы исходный код React был таким, как у вас, поэтому я предполагаю, что вы супер-профессионал и то, что вы делаете, выше моей зарплаты :)

Bens Steves 17.12.2018 15:22

хорошо ... console.info (data) во втором операторе then ... вы видите данные?

Bens Steves 17.12.2018 15:23

Ну, не как есть, потому что закрывающая скобка в первом блоке then стоит после второго, но должна быть перед ней.

Smarticles101 17.12.2018 15:27

Не в соответствии с документация по синтаксису он должен работать нормально, тогда

Smarticles101 17.12.2018 15:29

Позвольте нам продолжить обсуждение в чате.

Bens Steves 17.12.2018 15:30

репост в случае, если этот ответ поможет кому-то другому, кто сталкивается с этим

Bens Steves 17.12.2018 16:06

Во-первых, у вас проблема с объемом. Вы должны поместить вызов this.setState после сопоставления результатов.

Во-вторых, у вас неправильные закрывающие скобки для первого блока then.

В-третьих, javascript не требует установки функций как public или private.

Попробуй это:

groups() {
    fetch(`https://localhost:44301/api/v2/navigator/reports/groups`)
        .then((res) => res.json())
        .then((data) => { 
            const groups = data.results.map((group: IReportGroup) => {
                return( <li key = {group.id}>{group.name}</li>)
            })
            this.setState({groups: groups});
        })
}

Другие вопросы по теме