JHipster React 在另一个相关实体的详细信息屏幕中显示一个实体的列表
JHipster React Show List Of One Entity in Details Screen of Another Related Entity
我正在尝试使用 JHipster 7.0.1 (Azul JDK 11) 和 ReactJS 作为前端的应用程序。
我的 JDL 中有 2 个实体 - Domain 和 BadgeCategory 相关,如下所示
relationship OneToMany {
Domain{badgeClass required} to BadgeCategory{domain(name) required}
我希望能够在域详细信息屏幕中显示特定域的所有 BadgeCategories。
为此,我在存储库中创建了一个新方法 BadgeCategoryRepository.java
@Repository
public interface BadgeCategoryRepository extends JpaRepository<BadgeCategory, Long> {
List<BadgeCategory> findByDomainId(Long id);
}
然后在BadgeCategoryResource.java
中添加了一个新端点
@GetMapping("/badge-categories-domain/{id}")
public ResponseEntity<List<BadgeCategory>> getAllBadgeCategoriesForDomain(@PathVariable Long id) {
log.debug("REST request to get BadgeCategories for Domain : {}", id);
List<BadgeCategory> badgeCategory = badgeCategoryRepository.findByDomainId(id);
return ResponseEntity.ok().body(badgeCategory);
}
现在来到 React 部分,我在 badge-category.reducer.ts
中添加了一个常量
export const getEntitiesForDomain = createAsyncThunk(
'badgeCategory/fetch_entity_list_for_domain',
async (id: string) => {
const requestUrl = `api/badge-categories-domain/${id}`;
alert(JSON.stringify(axios.get<IBadgeCategory[]>(requestUrl)));
return axios.get<IBadgeCategory[]>(requestUrl);
});
然后我在 Domain Detail 屏幕组件中使用这个 reducer domain-detail.tsx
import { getEntity as getBadgeCategory, getEntitiesForDomain } from '../badge-category/badge-category.reducer';
const domainEntity = useAppSelector(state => state.domain.entity);
const badgeCategoryList = useAppSelector(state => state.badgeCategory.entities);
useEffect(() => {
dispatch(getEntity(props.match.params.id));
dispatch(getEntitiesForDomain(props.match.params.id));
}, []);
我期望常量 badgeCategoryList 包含在域详细信息屏幕中引用的域的所有徽章类别的列表。但我在 return.
中什么也得不到
在检查流程时,我看到端点正在被命中,Java 代码正在生成响应,但 UI 代码无法使用它。
导致此问题的原因是我在这里遗漏了什么?
Swagger 文档显示来自 Java 代码的预期响应
所以问题是新的 API 调用没有在 reducer 的 slice 部分注册。我必须对切片进行以下添加,效果非常好
.addMatcher(isFulfilled(getEntitiesForDomain), (state, action) => {
return {
...state,
loading: false,
entities: action.payload.data,
};
})
我正在尝试使用 JHipster 7.0.1 (Azul JDK 11) 和 ReactJS 作为前端的应用程序。
我的 JDL 中有 2 个实体 - Domain 和 BadgeCategory 相关,如下所示
relationship OneToMany {
Domain{badgeClass required} to BadgeCategory{domain(name) required}
我希望能够在域详细信息屏幕中显示特定域的所有 BadgeCategories。
为此,我在存储库中创建了一个新方法 BadgeCategoryRepository.java
@Repository
public interface BadgeCategoryRepository extends JpaRepository<BadgeCategory, Long> {
List<BadgeCategory> findByDomainId(Long id);
}
然后在BadgeCategoryResource.java
中添加了一个新端点@GetMapping("/badge-categories-domain/{id}")
public ResponseEntity<List<BadgeCategory>> getAllBadgeCategoriesForDomain(@PathVariable Long id) {
log.debug("REST request to get BadgeCategories for Domain : {}", id);
List<BadgeCategory> badgeCategory = badgeCategoryRepository.findByDomainId(id);
return ResponseEntity.ok().body(badgeCategory);
}
现在来到 React 部分,我在 badge-category.reducer.ts
中添加了一个常量export const getEntitiesForDomain = createAsyncThunk(
'badgeCategory/fetch_entity_list_for_domain',
async (id: string) => {
const requestUrl = `api/badge-categories-domain/${id}`;
alert(JSON.stringify(axios.get<IBadgeCategory[]>(requestUrl)));
return axios.get<IBadgeCategory[]>(requestUrl);
});
然后我在 Domain Detail 屏幕组件中使用这个 reducer domain-detail.tsx
import { getEntity as getBadgeCategory, getEntitiesForDomain } from '../badge-category/badge-category.reducer';
const domainEntity = useAppSelector(state => state.domain.entity);
const badgeCategoryList = useAppSelector(state => state.badgeCategory.entities);
useEffect(() => {
dispatch(getEntity(props.match.params.id));
dispatch(getEntitiesForDomain(props.match.params.id));
}, []);
我期望常量 badgeCategoryList 包含在域详细信息屏幕中引用的域的所有徽章类别的列表。但我在 return.
中什么也得不到在检查流程时,我看到端点正在被命中,Java 代码正在生成响应,但 UI 代码无法使用它。
导致此问题的原因是我在这里遗漏了什么?
Swagger 文档显示来自 Java 代码的预期响应
所以问题是新的 API 调用没有在 reducer 的 slice 部分注册。我必须对切片进行以下添加,效果非常好
.addMatcher(isFulfilled(getEntitiesForDomain), (state, action) => {
return {
...state,
loading: false,
entities: action.payload.data,
};
})