【发布时间】:2019-07-28 15:38:21
【问题描述】:
我有一个显示从 Spotify API 返回的搜索数据的组件。但是,每次我更新状态时,UI 都会闪烁:
<DebounceInput
debounceTimeout={300}
onChange={handleChange}
/>
钩子:
const [searchResults, setSearchResults] = useState(null)
使用 Apollo 调用 API:
const searchSpotify = async (query) => {
const result = await props.client.query({
query: SearchTracks,
variables: {
query
}
})
const tracks = result.data.searchedTracks
setSearchResults(tracks)
}
渲染:
{searchResults &&
<div className="search-results">
{searchResults.map((song) => (
<SongInfo key={song.id} {...song} />
))}
</div>
}
我注意到它只发生在第一次加载时。例如,如果我再次键入查询,它会显示而不会闪烁。有没有更好的方法来实现这一点,这样 UI 就不会闪烁?
【问题讨论】:
-
你可以添加一个加载状态,当你调用 api 来获取时,你可以切换一个加载标志/状态。
-
您是否尝试将
key属性添加到您的SongInfo元素中?类似<SongInfo key={song.id} {...song} />(将 id 更改为唯一标识您的歌曲的任何属性)。向列表项添加 key prop 可以提高 React 性能。 -
@varoons 加载状态发生得如此之快,以至于它实际上使 UI 变得更糟
-
@abadalyan 我的实际代码中有一个密钥,我尝试为这个问题简化它。我编辑了
组件以澄清 -
如果将 SongInfo 替换为简单的{song.name}会闪烁吗?
标签: javascript reactjs react-apollo apollo-client react-hooks