Пользовательские перехваты React работают не так, как ожидалось

#reactjs #react-hooks

#reactjs #react-перехваты

Вопрос:

Я пытаюсь реализовать очень простой пользовательский перехват под названием useOpen, который просто возвращает логическое значение (isOpen). Я хочу показать или скрыть некоторый текст в App.js на основе состояния isOpen. В настоящее время ничего не отображается и не пытается console.log (isOpen) в App.js выдает мне undefined. Заранее спасибо!

App.js

 import React from 'react'
import useOpen from './CustomHooks/useOpen'

function App () {
 const {isOpen} = useOpen;

return (
<div className='App'>
  {isOpen amp;amp; <p>isOpen</p>}
</div>
)
}

export default App
  

useOpen.js

 import { useState } from 'react'
export default function useOpen() {
    const [isOpen, setIsOpen] = useState(true)
    return { isOpen }
 }
  

Ответ №1:

Вам не хватает скобок в useOpen . Должно быть useOpen() .

 const {isOpen} = useOpen; // missing ()
  
 const {isOpen} = useOpen();
  

Ответ №2:

Попробуйте вызвать функцию useOpen в компоненте.

Ответ №3:

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

App.js

 import React from 'react'
import useOpen from './CustomHooks/useOpen'

function App () {
 //const {isOpen} = useOpen;
 const isOpen = useOpen();

return (
<div className='App'>
  {isOpen amp;amp; <p>isOpen</p>}
</div>
)
}

export default App
  

useOpen.js

 import { useState } from 'react'
export default function useOpen() {
    const [isOpen, setIsOpen] = useState(true)
    //return { isOpen }
    return isOpen
 }