我创建了三个不同的组件,它们根据不同的状态搜索用户,并将这些结果推送到MenuItem下拉菜单中。在下面的搜索功能中,我在第一个组件中设置了特定用户组的状态(所有三个组件本质上都是相同的,但是正在搜索不同的用户类型)。
private loadData() {
const sr = new SearchRequest();
sr.addFilter("ls_status", "Active");
searchUsers(this.props.app.api, sr).then((r: SearchResults<User>) => {
this.setState({
loanSpecialists: r.results
});
});
}
然后我将这些结果映射到“菜单项”下拉菜单。
const opts = this.state.loanSpecialists.map(n => (
<MenuItem key={n.id} value={n.email.replace("@credibilitycapital.com", "")}>
{n.email.replace("@credibilitycapital.com", "")}
</MenuItem>
));
然后在显示菜单下拉菜单的TextField中调用{opts}。
<TextField
select
fullWidth
variant="outlined"
value={this.state.assignedLs}
onChange={this.updateAssignment()}
margin="normal"
>
<MenuItem value="Unassigned">Unassigned</MenuItem>
{opts}
</TextField>
但该下拉菜单仅在大约50%的时间内显示正确的用户。在其余时间中,它将显示正确的用户以及仅应出现在其他两个下拉列表中的用户。我认为问题出在searchUsers函数,因为当我在开发人员工具中查看结果时,res.numHits和res.results应当相同时会有所不同。
searchUsers的API路由(db = gorm.DB):
au := lorpAuthenticated.Group("/users")
au.POST("/search", routes.SearchHandler(db, &user.User{}, &[]user.User{}))
SearchHandler函数:
func SearchHandler(db *gorm.DB, model, results interface{}, filters ...func(c echo.Context, sr *search.SearchRequest)) func(c echo.Context) error {
return func(c echo.Context) error {
var sr search.SearchRequest
if err := c.Bind(&sr); err != nil {
return handleErr(err, "Error binding SearchRequest")
}
// Apply filters
for _, filter := range filters {
filter(c, &sr)
}
if err := sr.ToGorm(db).Find(results).Error; err != nil {
return handleErr(err, "Error executing search")
}
hits, err := sr.ExecuteCount(db, model)
if err != nil {
return handleErr(err, "Error executing count")
}
return c.JSON(http.StatusOK, struct {
Results interface{} `json:"results"`
NumHits int `json:"numHits"`
}{
Results: results,
NumHits: hits,
})
}
}
我已经尝试调试了一个多星期,但我却迷失了方向,我们将不胜感激。