Я делаю простую функцию поиска, где объект пользователя возвращается из конечной точки 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
ошибку.