Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

172
Views
React se queja de que el gancho no se usa dentro de una función del cuerpo cuando mi componente se pasa a otro componente para renderizar

Tengo un componente que usa otro componente como renderizador. Sin embargo, React no me permite usar ganchos en el componente del renderizador ya que arroja el siguiente error:

 Error: Invalid hook call. Hooks can only be called inside of the body of a function component.

Aquí hay un ejemplo de lo que tengo en mi componente de visualización, que es un límite de error :

 class DisplayComponent extends Component { // ... render() { const { rendererComponent } = this.props; return rendererComponent({ enabled: true, name: 'hello-world' }) } }

Como puede ver, el accesorio rendererComponent en DisplayComponent se llama como una función aunque es un componente y le paso algunos accesorios como lo llamo de esta manera.

Ahora, en mi otro archivo donde uso DisplayComponent , se ve así:

 const RendererComponent = (props) => { const { enabled, name } = props; const [testState, setTestState] = useState(); // Error: Invalid hook call useEffect(() => { // Error: Invalid hook call }, [testState]); return ( <div>{name} - {enabled}</div> ) } const App = () => { return ( <DisplayComponent rendererComponent={RendererComponent} /> ) }

Aquí está la clave. Por alguna razón, no puedo usar ganchos como useEffect , useState , etc. en RendererComponent . Si lo uso, React arrojará el error que mencioné anteriormente de que el enlace no es válido. Pero me gustaría tener algo de lógica que requiera ganchos en RendererComponent .

¿Cómo puedo usar ganchos para tener estados y efectos en un componente que se llama como lo hice?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Está realizando una llamada de función en lugar de montar el componente, esas son dos llamadas y sintaxis diferentes, cámbielo a:

 class DisplayComponent extends Component { render() { // Custom component must be Capitalized const { rendererComponent: RenderedComponent } = this.props; return <RenderedComponent enabled name="hello-world" />; } } // Notice that the JSX is transpiled to React.createElement(RenderedComponent, { enabled: true, name: "hello-world" });

En React, solo puede montar un componente llamando a su API con React.createElement (JSX es su sintaxis de azúcar), mientras que una llamada de función simple es puramente JS que no activa la API de React, es decir, no registrará el componente en el árbol de componentes. . Por lo tanto, la implementación interna como ganchos no tiene sentido, perderá el estado en cada renderizado (no se activará la Reconciliación).

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!