Не правильно отображает при использовании response-apollo useQuery и onChange - PullRequest
0 голосов
/ 21 сентября 2019

Я делаю простую функцию поиска, где объект пользователя возвращается из конечной точки graphql, если найдено подходящее имя пользователя.

В моем текущем коде рендеринг, кажется, не работает правильно, т. Е. Он рендерится для некоторых имен пользователей, но никогда для других, даже если я вижу, что пользователь возвращается и правильно установлен в состояние.

import React, { useState, useEffect } from 'react'
import { useLazyQuery } from '@apollo/react-hooks'
import { Link } from 'react-router-dom'


import FIND_USER_BY_LOGIN from '../queries/FIND_USER_BY_LOGIN'


const Search = () => {

    const [term] = useState("")
    const [user, setUser] = useState(null);
    const [getUser, { data }] = useLazyQuery(FIND_USER_BY_LOGIN);

    useEffect(() => {
        setUser(data && data.user ? data.user : null)
    }, [user, data])


    return (
        <div>
            { !! user && (
                <Link to={`user/${user.login}`}>{user.name}</Link>
            )}
            <input type="text" name="login" value={term} onChange={ e => {
                const login = e.target.value
                getUser({ variables: {
                    login
                }})
            }}/>
        </div>
    )
}

export default Search

Если переместить логику установки состояния, т.е. setUser, за пределы useEffect, я получу too many re-renders ошибку.

...