Как использовать актуальные данные в React useEffect при отсутствии зависимостей?

У меня есть useEffect, который должен вызваться строго один раз при рождении компонента. В нем я подписываюсь на определенное событие, и как только событие происходит, я вызываю функцию saveData (внутри useEffect). Но так как useEffect выполнился один раз (при рождении компонента), он из замыкания берет те данные (userId и schedule), которые были при первом рендере и вызывает функцию именно с ними, хотя данные уже поменялись.

  const saveData = useCallback(() => {
    postSchedule(state.userId as string, state.schedule)
    dispatch(actions.setEditMode(false))
  }, [state.userId, state.schedule])

  const assistantRef = useRef<ReturnType<typeof createAssistant>>()
  const assistantStateRef = useRef<AssistantState>({} as AssistantState)
  useEffect(() => {
    assistantRef.current = initializeAssistant(() => assistantStateRef.current)
    initAssistant(dispatch, assistantRef.current as ReturnType<typeof createAssistant>, assistantStateRef.current, saveData)
  }, [])

Зависимости прописать я не могу, так как мне нужно чтобы useEffect вызывался лишь единожды, иначе у меня лишние подписки происходят. Отписываться в return если что не вариант (это специфические подписки).

Есть ли какой-то самый адекватный способ решения этой проблемы или userId и schedule в useRef нужно загнать чтобы потом их как рефы вызвать?


Ответы (0 шт):