Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of Transition which is inside StrictMode

I am trying to use a function as a prop inside a component and this component is a child of another component. But the function is not working.? Can I know why. This is the warning i am receiving in the console.

Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of Transition which is inside StrictMode. Instead, add a ref directly to the element you want to reference

This is my code

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>     )    } } 
like image 612
Niroshan_Krish Avatar asked Mar 28 '20 16:03

Niroshan_Krish


People also ask

What is findDOMNode?

findDOMNode is an escape hatch used to access the underlying DOM node. In most cases, use of this escape hatch is discouraged because it pierces the component abstraction. It has been deprecated in StrictMode .

What is react StrictMode?

StrictMode is a tool for highlighting potential problems in an application. Like Fragment , StrictMode does not render any visible UI. It activates additional checks and warnings for its descendants. Note: Strict mode checks are run in development mode only; they do not impact the production build.


1 Answers

In index.js change <React.StrictMode><App /><React.StrictMode> to <App /> and you will not see this warning. Please note that strict mode helps you with

  • Identifying components with unsafe lifecycles
  • Warning about legacy string ref API usage
  • Warning about deprecated findDOMNode usage
  • Detecting unexpected side effects
  • Detecting legacy context API

Please refer to https://reactjs.org/docs/strict-mode.html before removing it.

like image 123
Ali Rehman Avatar answered Sep 18 '22 21:09

Ali Rehman