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

531
Views
Advertencia: findDOMNode está en desuso en StrictMode. findDOMNode recibió una instancia de Transition que está dentro de StrictMode

Estoy tratando de usar una función como accesorio dentro de un componente y este componente es hijo de otro componente. Pero la función no funciona.? Puedo saber por qué. Esta es la advertencia que estoy recibiendo en la consola.

Advertencia: findDOMNode está en desuso en StrictMode. findDOMNode recibió una instancia de Transition que está dentro de StrictMode. En su lugar, agregue una referencia directamente al elemento al que desea hacer referencia

este es mi codigo

 class Todo extends Component { state = { show: false, editTodo: { id: "", title: "", isCompleted: false } } handleClose = () => { this.setState({ show: false }) } handleShow = () => { this.setState({ show: true }) } getStyle () { return { background: '#f4f4f4', padding: '10px', borderBottom: '1px #ccc dotted', textDecoration: this.props.todo.isCompleted ? 'line-through' : 'none' } } //this method checks for changes in the edit field handleChange = (event) => { this.setState({ title: event.target.value }) console.log(this.state.editTodo.title); } render () { //destructuring const { id, title } = this.props.todo; return ( <div style={this.getStyle()}> <p> <input type='checkbox' style={{ margin: "0px 20px" }} onChange={this.props.markComplete.bind(this, id)} /> {''} {title} <Button style={{ float: "right", margin: "0px 10px" }} variant="warning" size={"sm"} onClick={this.handleShow}>Edit</Button>{' '} <Button style={{ float: "right" }} variant="danger" size={"sm"} onClick={this.props.DelItem.bind(this, id)}>Delete</Button> </p> <Modal show={this.state.show} onHide={this.handleClose}> <Modal.Header closeButton> <Modal.Title>Edit your Task!</Modal.Title> </Modal.Header> <Modal.Body > <FormGroup > <Form.Control type="text" value={this.state.editTodo.title} onChange={this.handleChange} /> </FormGroup> </Modal.Body> <Modal.Footer> <Button variant="secondary" onClick={this.handleClose}> Close </Button> <Button variant="primary" onClick={this.handleClose}> Save Changes </Button> </Modal.Footer> </Modal> </div> ) } }
over 4 years ago · Santiago Trujillo
12 answers
Answer question

0

Parece que la llamada setState se está escribiendo en el lugar equivocado. Asegúrate de que esté en el objeto editTodo :

 handleChange = (event) => { this.setState(state => ({ editTodo: { ...state.editTodo, title: event.target.value, }, })); }
over 4 years ago · Santiago Trujillo Report

0

En index.js cambie <React.StrictMode><App /><React.StrictMode> a <App /> y no verá esta advertencia. Tenga en cuenta que el modo estricto le ayuda con

  • Identificación de componentes con ciclos de vida inseguros
  • Advertencia sobre el uso de la API de referencia de cadena heredada
  • Advertencia sobre el uso obsoleto de findDOMNode
  • Detección de efectos secundarios inesperados
  • Detección de la API de contexto heredada

Consulte https://reactjs.org/docs/strict-mode.html antes de eliminarlo.

over 4 years ago · Santiago Trujillo Report

0

La respuesta de @Ross Allen no está relacionada con el problema básico (la advertencia), resolvió un problema de sintaxis en el código.

La respuesta de @Ali Rehman está más relacionada con la advertencia, pero también no resuelve correctamente el problema, solo oculta el problema para que la advertencia no aparezca más.. ¿Por qué no si no nos importan las desaprobaciones?

Sí, el problema proviene de React.StrictMode:

 <React.StrictMode> <App /> </React.StrictMode>

StrictMode es una herramienta para resaltar problemas potenciales en una aplicación. Activa chequeos y advertencias adicionales para sus descendientes, tales como:

  • Identificación de componentes con ciclos de vida inseguros
  • Advertencia sobre el uso de la API de referencia de cadena heredada
  • Advertencia sobre el uso obsoleto de findDOMNode
  • Detección de efectos secundarios inesperados
  • Detección de la API de contexto heredada

Como el seguimiento del error no se proporciona completamente en la pregunta, supongo que el problema está relacionado con una Advertencia sobre el uso obsoleto de findDOMNode , debido a la referencia a elementos en los métodos de representación:

 <Modal show={this.state.show} onHide={this.handleClose}> <Modal.Header closeButton> <Modal.Title>Edit your Task!</Modal.Title> </Modal.Header> <Modal.Body > <FormGroup > <Form.Control type="text" value={this.state.editTodo.title} onChange={this.handleChange} /> </FormGroup> </Modal.Body> <Modal.Footer> <Button variant="secondary" onClick={this.handleClose}> Close </Button> <Button variant="primary" onClick={this.handleClose}> Save Changes </Button> </Modal.Footer> </Modal>

Cuando se renderiza el componente, entonces el modal también se ha renderizado, y tratamos de cambiar los estados del componente, el componente (y por lo tanto el modal) se volverá a renderizar, y en esta etapa el modal no puede tener acceso a los estados. .

La solución para resolver la advertencia es usar React refs . Refs ayuda a acceder a los nodos DOM o elementos React creados en el método de renderizado.

over 4 years ago · Santiago Trujillo Report

0

Si está utilizando un modal o un carrusel de react-bootstrap una solución alternativa es deshabilitar las animaciones . Apagarlos hace que la advertencia desaparezca.

Para modales:

 <Modal animation={false}> <Modal.Header closeButton> <Modal.Title>Title</Modal.Title> </Modal.Header> <Modal.Body> Content </Modal.Body> </Modal>

Para carruseles:

 <Carousel slide={false} fade={false}> <Carousel.Item> Scene 1 </Carousel.Item> <Carousel.Item> Scene 2 </Carousel.Item> </Carousel>

Sé que encajaría mejor como comentario una vez que no responda la pregunta OP, pero no tengo la reputación suficiente para hacerlo y tal vez ayude a alguien.

EDITAR : Esto se solucionó en v2 alpha

over 4 years ago · Santiago Trujillo Report

0

La solución más simple para este tipo de escenario es envolver su componente con un elemento DOM al que realmente pueda adjuntarle una referencia. Por ejemplo:

 import React, { createRef, Component } from "react"; import ChildComponent from "./child-component"; class MyComponent extends Component { componentDidMount() { const node = this.wrapper.current; /* Uses DOM node */ } wrapper = createRef(); render () { return ( <div ref={this.wrapper}> <ChildComponent>{this.props.children}</ChildComponent> </div> ); } } export default MyComponent;`
over 4 years ago · Santiago Trujillo Report

0

Para solucionar este problema, simplemente elimine React.StrictMode de index.js donde accede a la identificación de la raíz dom, eso lo solucionará.

En lugar de esto:

 ReactDOM.render( <React.StrictMode> <App /> </React.StrictMode>, document.getElementById('root') );

Utilice esta línea:

 ReactDOM.render(<App />,document.getElementById('root'));
over 4 years ago · Santiago Trujillo Report

0

No estoy seguro de si ayuda cuando se usa la biblioteca material-ui, pero en muchos casos esto puede ayudar:

 const nodeRef = React.useRef(null); return <div> <CSSTransition ... nodeRef={nodeRef}> <div ref={nodeRef}> ... </div> </CSSTransition> </div>
over 4 years ago · Santiago Trujillo Report

0

Un problema similar: a continuación resolvió el problema:

En la función ReactDOM.render() , cambia

desde

 <React.StrictMode> <SnackbarProvider> <App/> </SnackbarProvider> </React.StrictMode>

para

 <SnackbarProvider> <React.StrictMode> <App/> </React.StrictMode> </SnackbarProvider>

NOTA: Las etiquetas SnackbarProvider y React.StrictMode están invertidas.

over 4 years ago · Santiago Trujillo Report

0

He visto este error antes, cuando usé react-bootstrap y react-router-dom uno al lado del otro. reemplacé

 <Link to="/foo">sth</Link>

con

 <LinkContainer to="/foo/bar"> <Button>Foo</Button> </LinkContainer>

y no hay necesidad de usar Link para NavLink

over 4 years ago · Santiago Trujillo Report

0

Este es un problema de la biblioteca MaterialUI, y aquí hay una solución temporal antes de que se lance oficialmente el nuevo MaterialUI v5

over 4 years ago · Santiago Trujillo Report

0

Creo que este problema no es un error, sino una advertencia de desaprobación. el componente de la biblioteca aún funciona, pero usa una función que ya no estará disponible en versiones futuras. por lo tanto, la biblioteca debe actualizarse para usar otra función para reemplazar la anterior.

over 4 years ago · Santiago Trujillo Report

0

En Semantic UI React , este es un problema conocido , la mayoría de sus componentes todavía usan findDOMNode() . Esto se solucionará en la interfaz de usuario semántica React v3 , donde todos estos componentes se actualizarán para usar React.forwardRef() .

Al principio pensé que estaba haciendo algo mal y pasé bastante tiempo investigando, solo para descubrir que era un problema conocido.

over 4 years ago · Santiago Trujillo 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!