48

I need this code to be implemented in class component. It is in order to use a upload progress in my class component with react-toastify

function Example(){
  const toastId = React.useRef(null);
  function handleUpload(){
    axios.request({
      method: "post", 
      url: "/foobar", 
      data: myData, 
      onUploadProgress: p => {
        const progress = p.loaded / p.total;
        if(toastId.current === null){
            toastId = toast('Upload in Progress', {
            progress: progress
          });
        } else {
          toast.update(toastId.current, {
            progress: progress
          })
        }
      }
    }).then(data => {
      
      toast.done(toastId.current);
    })
  }
  return (
    <div>
      <button onClick={handleUpload}>Upload something</button>
    </div>
  )
}

How can i do that?

0

3 Answers 3

101

useRef() is among react hooks which are meant to be used in Functional components. But if you want to create a reference in a class-based component, you can do it from the class constructor like the code below:

  constructor(props) {
    super(props);
    this.myRef = React.createRef();
  }

OR
  constructor(props) {
    super(props);
    this.state = { myRef: React.createRef() }
  }

Check React.createRef().

Sign up to request clarification or add additional context in comments.

Comments

7

Assign your value in constructor i.e bind with this.

createRef !== useRef, useRef is used to preserve the value across re-renders and for that in class component you need to bind it with this not createRef

2 Comments

you should add a code example
As @FacundoColombier said, the answer should contain a code example.
0

How to use React.useRef() in class extends component:

import { Component, createRef } from "react";

export default class App extends Component{
 constructor(props){
    super(props);
   
    this.myP = createRef();
    window.addEventListener("load", ()=>this.prompt());
 }
 prompt(){
     this.myP.current.innerText = 'Hello World!'
 }
 render(){
    return(
        <>
          <p ref={this.myP} />        
        </>
    );
 }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.