5

I need to switch my React app Components to Typescript.

I installed TS package and created a tsconfig.json file, react-app-env.d.ts files. And I also changed the extension from .js to .tsx. But in one of components I have an error. For example: in <div>

<div class="main-div">
    <div class="panel">
    <h2>Вхід</h2>
   </div>
</div>

Type '{ children: Element[]; class: string; }' is not assignable to type 'DetailedHTMLProps, HTMLDivElement>'. Property 'class' does not exist on type 'DetailedHTMLProps, HTMLDivElement>'.ts(2322)

4
  • 4
    it should be className="main-div" not class Commented Jan 9, 2019 at 15:04
  • 2
    It literally tells you what the problem is Property 'class' does not exist Commented Jan 9, 2019 at 15:06
  • But I have the same problem with label. <label for="remember-me" className="remember"> <span>Запам'ятати</span> <span><input id="remember-me" name="remember-me" type="checkbox"/></span> </label> Commented Jan 9, 2019 at 15:10
  • 1
    Use htmlFor instead for in JSX templates. Commented Jan 9, 2019 at 15:13

3 Answers 3

14

The problem is that certain HTML attributes are also reserved words in Javascript, so to avoid problems, JSX syntax uses slightly different attributes from pure HTML.

The main two you're having trouble with are:

  • class is now className
  • for is now htmlFor

So your question would be:

<div className="main-div">
    <div className="panel">
    <h2>Вхід</h2>
   </div>
</div>

And the label you posted in a comment would be:

<label htmlFor="remember-me" className="remember">
    <span>Запам'ятати</span>
    <span><input id="remember-me" name="remember-me" type="checkbox"/></span> 
</label>
Sign up to request clarification or add additional context in comments.

Comments

0

You are missing a closing </div> and the property is not class, but className

1 Comment

Thank you. But I have the same problem with label. <label for="remember-me" className="remember"> <span>Запам'ятати</span> <span><input id="remember-me" name="remember-me" type="checkbox"/></span> </label>
0

yo!

change class to className !

<div className="main-div">
    <div className="panel">
       <h2>Вхід</h2>
    </div>
</div>

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.