【发布时间】:2021-02-18 15:40:05
【问题描述】:
只是想知道将 letterSelected 传递给 useLazyQuery fetchMovies 查询的最佳方法,这样我就不必使用“A”的静态变量。我希望有一种方法可以将它直接传递给 fetchMovies。 useLazyQuery 是一个阿波罗查询。
const BrowseMovies = () => {
const [fetchMovies, { data, loading}] = useLazyQuery(BROWSE_MOVIES_BY_LETTER, {
variables: {
firstLetter: "A"
}
})
return (
<div className="browserWrapper">
<h2>Browse Movies</h2>
<AlphabetSelect
pushLetterToParent={fetchMovies}
/>
{
data && !loading &&
data.browseMovies.map((movie: any) => {
return (
<div className="browseRow">
<a className="movieTitle">
{movie.name}
</a>
</div>
)
})
}
</div>
)
}
export default BrowseMovies
const AlphabetSelect = ({pushLetterToParent}: any) => {
const letters = ['A','B','C','D','E','F','G','H','I','J','K','L', 'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','#']
const [selectedLetter, setSelectedLetter] = useState("A")
const onLetterSelect = (letter: string) => {
setSelectedLetter(letter.toUpperCase())
pushLetterToParent(letter.toUpperCase())
}
return (
<div className="alphabetSelect">
{
letters.map((letter: string) => {
return(
<div
className={selectedLetter === letter ? 'letterSelectActive' : 'letterSelect'}
onClick={() => onLetterSelect(letter)}
>
{letter}
</div>
)
})
}
</div>
)
}
export default AlphabetSelect
【问题讨论】:
-
useLazyQuery是自定义钩子,还是导入并刚刚使用?我认为我们需要查看该代码以提供更多帮助。 -
apollographql.com/docs/react/api/react/hooks/#uselazyquery 这是从 apollo react 库中导入的钩子 :)
-
您的代码似乎已经正确。你只需要写
pushLetterToParent({ variables : { firstLetter: letter.toUpperCase() } })
标签: javascript reactjs apollo