1 回答

TA貢獻1785條經驗 獲得超8個贊
這似乎是通過Lifting State Up解決的問題。useLazyQuery
接受 gql 查詢和選項并返回一個函數以稍后執行查詢。聽起來您希望子組件更新variables
配置參數。
瀏覽電影
移動
firstLetter
狀態BrowseMovies
組件從狀態更新查詢參數/選項/配置
添加
useEffect
狀態更新時觸發獲取將
firstLetter
狀態和setFirstLetter
狀態更新器傳遞給子組件
const BrowseMovies = () => {
? const [firstLetter, setFirstLetter] = useState('');
? const [fetchMovies, { data, loading}] = useLazyQuery(
? ? BROWSE_MOVIES_BY_LETTER,
? ? { variables: { firstLetter } } // <-- pass firstLetter state
? );
? useEffect(() => {
? ? if (firstLetter) {
? ? ? fetchMovies(); // <-- invoke fetch on state update
? ? }
? }, [firstLetter]);
? return (
? ? <div className="browserWrapper">
? ? ? <h2>Browse Movies</h2>
? ? ? <AlphabetSelect?
? ? ? ? pushLetterToParent={setFirstLetter} // <-- pass state updater
? ? ? ? selectedLetter={firstLetter} // <-- pass state
? ? ? />
? ? ? {
? ? ? ? data && !loading &&
? ? ? ? ? data.browseMovies.map((movie: any, index: number) => {
? ? ? ? ? ? return (
? ? ? ? ? ? ? <div key={index} className="browseRow">
? ? ? ? ? ? ? ? <a className="movieTitle">
? ? ? ? ? ? ? ? ? {movie.name}
? ? ? ? ? ? ? ? </a>
? ? ? ? ? ? ? </div>
? ? ? ? ? ? )
? ? ? ? ? })
? ? ? }
? ? </div>
? )
}
字母選擇
將pushLetterToParent回調附加到 的處理div程序onClick
?const AlphabetSelect = ({ pushLetterToParent, selectedLetter }: any) => {
? ?const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ#';
? ?return (
? ? ?<div className="alphabetSelect">
? ? ? ?{
? ? ? ? ?letters.split('').map((letter: string) => {
? ? ? ? ? ?return(
? ? ? ? ? ? ?<div
? ? ? ? ? ? ? ?key={letter}
? ? ? ? ? ? ? ?className={selectedLetter === letter ? 'letterSelectActive' : 'letterSelect'}?
? ? ? ? ? ? ? ?onClick={() => pushLetterToParent(letter.toUpperCase())}
? ? ? ? ? ? ?>
? ? ? ? ? ? ? ?{letter}
? ? ? ? ? ? ?</div>
? ? ? ? ? ?)
? ? ? ? ?})
? ? ? ?}
? ? ?</div>
? ?)
?}
添加回答
舉報