Ostrzeżenie: nieznana klasa właściwości DOM. Czy chodziło Ci o className?


114

Właśnie zacząłem poznawać Reacta, dodając komponent z prostą funkcją renderującą:

render() {
  return <div class="myApp"></div>
}

Po uruchomieniu aplikacji pojawia się następujący błąd:

Warning: Unknown DOM property class. Did you mean className?

Mogę to rozwiązać, zmieniając class na className.

Pytanie brzmi; czy React egzekwuje tę konwencję? Dlaczego muszę używać classNamezamiast konwencjonalnych class? Jeśli jest to ograniczenie, to czy wynika to ze składni JSX, czy z innego powodu?

Odpowiedzi:


151

Tak, to konwencja React:

Ponieważ JSX to JavaScript, identyfikatory takie jak classi nie forsą zalecane jako nazwy atrybutów XML. Zamiast React DOM elementy oczekiwać nazwy właściwości DOM, jak classNamei htmlForodpowiednio.

JSX w głębi .


9
Uważam to za strasznie nieintuicyjne. Myślę, że parser powinien wiedzieć, jak przełączać konteksty między dwoma językami w oparciu o kontekst, odciążyć programistę i narzędzia
Jonathan

13

Meteor używa babel do transpilacji ES5 do ES6 (ES2015), więc możemy sobie z nim poradzić jak z normalną aplikacją Node z dodanym transpilerem babel.

Musisz dodać .babelrcplik do folderu głównego projektu i dodać następujące elementy

{
  "plugins": [
    "react-html-attrs"
  ]
}

I oczywiście musisz zainstalować tę wtyczkę za pomocą npm:

npm install --save-dev babel-plugin-act-html-attrs


Dziękuję, mogę naprawić "Nieprawidłowy DOM" po instalacji react-facebook-login.
Kakashi

12

W React.js nie ma dostępnych właściwości for i class, więc musimy ich użyć

for   --> htmlFor
class --> className

4

Nie możesz użyć klasy dla żadnego atrybutu tagu HTML, ponieważ JS ma inne znaczenie klasy. Dlatego musisz użyć className zamiast class.

A także użyj atrybutu htmlFor zamiast for.


3

W HTML używamy

class="navbar"

ale w React i ReactNative nie ma HTML-a, używamy tutaj JSX (JavaScript XML)

className="navbar"

0

Składnia JSX po skompilowaniu za pomocą babel, podstawową składnią, której użyje do utworzenia elementu HTML, będzie

   React.createElement('div', {attributes}, "Hello");

Jeśli użyjemy klasy zamiast className, reakcja wywnioskuje, że jest to klasa javascript zamiast atrybutu klasy html. [Powód, dla którego nazwa zmiennej „class” jest już używana w pliku do tworzenia klasy javascript i jest zarezerwowana do tego samego celu]. Co jest złe, a kompilator zgłasza błąd, ponieważ klasa javascript nie jest poprawną właściwością dla elementów HTML DOM.

   React.createElement("p", {"class": "header"}, "Hello");

Dlatego konieczne jest użycie className zamiast class.

   React.createElement("p", {"className": "header"}, "Hello")
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.