Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

198
Visualizações
Funciones globales de React que utilizan ganchos.

Tengo una función llamada scheduleShortcut que se usa en un par de lugares a lo largo de una aplicación. Inicialmente, esta función era local para los componentes específicos, pero dado que se usa varias veces, quiero refactorizar esta función en una función global.

Al principio, traté de hacer lo siguiente:

 const history = useHistory(); const dispatch = useDispatch(); export const scheduleShortcut = (jobId: number) => { dispatch(jobGanttFocus(jobId)); dispatch(focusJobScheduleFilter(jobId)); dispatch(toggleScheduleView('jobs')); history.push('/schedule'); };

Sin embargo, cuando hago esto, aparece un error que dice que no puedo usar useHistory o useDispatch a menos que estén dentro de un componente React o un gancho personalizado. Luego, traté de convertir scheduleShortcut en un enlace personalizado de la siguiente manera:

 export const useScheduleShortcut = (jobId: number) => { const history = useHistory(); const dispatch = useDispatch(); dispatch(jobGanttFocus(jobId)); dispatch(focusJobScheduleFilter(jobId)); dispatch(toggleScheduleView('jobs')); history.push('/schedule'); };

Esto me permitió utilizar useDispatch y useHistory. Sin embargo, cuando trato de llamar a esta función dentro de los componentes específicos en los que la necesito, aparece un error similar. Básicamente, dice que no puedo usar mi enlace personalizado (es decir useScheduleShortcut ) dentro de una devolución de llamada.

 <Roster jobId={job.id} assignWorkers={canAssignWorker ? handleAssignWorkers : undefined} scheduleShortcut={() => useScheduleShortcut(jobId)} />

¿Hay alguna manera de evitar estos errores y usar el método abreviado de programación como una función reciclable? ¿O de hecho esto no es posible ya que estoy usando los ganchos?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Los ganchos, de hecho, deben llamarse en el nivel superior, estás rompiendo esa regla

Podría exponer (devolver) una función desde el gancho que podría llamarse como devolución de llamada después.

es decir

 export const useScheduleShortcut = () => { const history = useHistory() const dispatch = useDispatch() const dispatchScheduleShortcut = (jobId) => { dispatch(jobGanttFocus(jobId)) dispatch(focusJobScheduleFilter(jobId)) dispatch(toggleScheduleView('jobs')) history.push('/schedule') } return { dispatchScheduleShortcut } };

y luego usarlo como

 const { dispatchScheduleShortcut } = useScheduleShortcut() return ( <Roster jobId={job.id} assignWorkers={canAssignWorker ? handleAssignWorkers : undefined} scheduleShortcut={() => dispatchScheduleShortcut(jobId)} /> )
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda