Реагировать на пользовательский хук, не получая текущее состояние значения от другого пользовательского хука - PullRequest
0 голосов
/ 18 июня 2019

У меня есть обработчик событий, который устанавливает выбранное значение в списке на [values, setValues] ловушку состояния.После этого у меня есть хук useEffect, который вызывает хук состояния [options, setOptions], чтобы установить это значение на options.Однако, хотя setValues может установить состояние (которое отображается, когда я console.log, setOptions не может установить новое состояние values в состояние options

ОБНОВЛЕНИЕ

Перемещение console.log(options.data) из эффекта решает проблему частично, потому что оно регистрирует текущее значение, однако, возвращая это значение и используя его в другом настраиваемом хуке, возвращает значение по умолчанию options. Я обновил код.

Я пытался использовать useRef для получения текущего значения, но моя реализация не работает. Возможно, я ошибаюсь в этом бите.

   const useFirstCustomHook = () => {
   const [options, setOptions] = useState({
        data: null
    })

    const [values, setValues] = useState({
        name: "",
        myid: "my-id"
    });

    //state changer
    function handleChange(event, id) {
        setValues(oldValues => ({
          ...oldValues,
          name: event.target.value,
          myid: id.props.id,
        }));
      }

      useEffect(() => {
        setOptions({
            data: values
        })

      },[values])
      console.log(options.data) //not printing the current state
     return {
       options
     }
   }
   export default useFirstCustomHook 
   const [waitState, setWait] = useState(0)
   const { values, options } = useFirstCustomHook ()

   useEffect(() => {
      console.log(options)
      let wait = () => {
            setTimeout(() => setWait(waitState+1), 10000)
        }

      async function fetchData() {
        //fetch some data then wait
        wait()
      }

   },[wait])
   export default useFetchedData

Я ожидаю новое состояниеoptions совпадает с текущим значением values, но отражает только значение по умолчанию.

...