Prynik
@Prynik

Почему при попытке обновить state из useEffect он не обновляется?

Почему при попытке обновить tabsFields из useEffect он не обновляется?

// Apollo Client запрос к GraphQL серверу
    const { data, error, loading } = useQuery(GET_ORG(props.match.params.essenceId))

    // State который не обновляется
    const [tabsFields, setTabsFields] = useState()

    // отслеживаю изменение state
    useEffect(() => {
        if (data !== undefined) {
            // перебираю массив контактных лиц
            data.org.contactPersons.map(i => {
                const ID = nanoid(8) // использую либу nanoid для генерации ID
                let obj = {}

                obj[i._id + '~' + ID + '^name'] = i.name 
                i.phone.map((j, idx) => {
                    obj[i._id + '~' + ID + '^phone-' + idx] = j
                })

                i.eMail.map((j, idx) => {
                    obj[i._id + '~' + ID + '^eMail-' + idx] = j
                })
                setTabsFields({...tabsFields, obj})
            })
        }
    }, [data])


Если не хватает каких-то фрагментов кода, добавлю.

Я пытался реализовать альтернативный вариант, но лишь поменял шило на мыло
Альтернативный вариант

// Apollo Client запрос к GraphQL серверу
    const { data, error, loading } = useQuery(GET_ORG(props.match.params.essenceId))

    // State который не обновляется
    const [tabsFields, setTabsFields] = useState({})

    // отслеживаю изменение state
    useEffect(() => {
        if (data !== undefined) {
            // перебираю массив контактных лиц
            data.org.contactPersons.map(i => {
                const ID = nanoid(8) // использую либу nanoid для генерации ID
                let obj = {...tabsFields}

                obj[i._id + '~' + ID + '^name'] = i.name 
                i.phone.map((j, idx) => {
                    obj[i._id + '~' + ID + '^phone-' + idx] = j
                })

                i.eMail.map((j, idx) => {
                    obj[i._id + '~' + ID + '^eMail-' + idx] = j
                })
                setTabsFields(obj)
            })
        }
    }, [data])

  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы