我正在将material-ui与react功能组件一起使用,并使用其Autocomplete组件。我对其进行了自定义,并且每当更改输入字段中的文本时,我都希望该组件呈现新的搜索结果。
callAPI("xyz")
我在操作中调用API,并使用xyz参数,在此功能组件中调用了dispatch方法。
这里的问题是,当组件进行调用时,应该等待API响应然后呈现结果,但是它得到了未解决的承诺,因此呈现失败。
<Paper square>
{callAPI("xyz").results.map(
result => console.log(result);
)}
</Paper>
由于结果是未解决的承诺,因此将无法映射。 我需要一种方法来仅在数据可用时调用地图,或者在数据存在之前显示一些文本,然后在获取数据后进行更改。
任何纠正此代码的建议都会很有帮助。
编辑:
function IntegrationDownshift() {
return (
<div>
<Downshift id="downshift-simple">
{({
getInputProps,
getItemProps,
getMenuProps,
highlightedIndex,
inputValue,
isOpen,
selectedItem
}) => (
<div>
{renderInput({
fullWidth: true,
InputProps: getInputProps({
placeholder: "Search users with id"
})
})}
<div {...getMenuProps()}>
{isOpen ?
<Paper square>
{callAPI(inputValue).users.map(
(suggestion, index) =>
renderSuggestion({
suggestion,
index,
itemProps: getItemProps({
item:
suggestion.userName
}),
highlightedIndex,
selectedItem
})
)}
</Paper>
: null}
</div>
</div>
)}
</Downshift>
</div>
);
}
答案 0 :(得分:1)
反应16.8引入了Hooks:
挂钩是使您“挂钩” React状态和生命周期的函数 功能组件的功能。
因此,您拥有useState()
,可以用一个空数组声明一个状态变量,并在useEffect()
中调用您的API,以便在从API获得响应时填充该状态:
except
有关钩子的更多信息:https://reactjs.org/docs/hooks-intro.html。
答案 1 :(得分:0)
处理此问题的最简单方法是使用特南里语表达 还有一种最佳实践,即以生命周期方法调用API请求,然后将结果保存在本地状态。
componentDidMount() {
callAPI("xyz").results.map(
result => this.setState(result);
}
<Paper square>
{this.state.results ?
this.state.results.map(
result => console.log(result);
: <p> Loading... </p>
)}
</Paper>