Я видел, что React 16 позволяет передавать атрибуты в DOM. Значит, это означает, что вместо className можно использовать class, верно?
Мне просто интересно, есть ли преимущества в использовании className по сравнению с class, помимо обратной совместимости с предыдущими версиями React.
Ответы:
class
- ключевое слово в javascript, а JSX - это расширение javascript. Это основная причина, по которой React используетclassName
вместоclass
.В этом отношении ничего не изменилось.
Чтобы расширить это еще немного. А ключевое слово означает , что знак имеет особое значение в синтаксисе языка. Например в:
class MyClass extends React.Class {
Токен
class
означает, что следующий токен является идентификатором, а то, что следует за ним, является объявлением класса. См. Ключевые слова Javascript + Зарезервированные слова .Тот факт, что токен является ключевым словом, означает, что мы не можем использовать его в некоторых выражениях, например
// invalid in older versions on Javascript, valid in modern javascript const props = { class: 'css class' } // valid in all versions of Javascript const props = { 'class': 'css class' }; // invalid! var class = 'css'; // valid var clazz = 'css'; // invalid! props.class = 'css'; // valid props['class'] = 'css';
Одна из проблем заключается в том, что никто не может знать, не возникнет ли какая-то другая проблема в будущем. Каждый язык программирования все еще развивается, и его
class
можно использовать в новом конфликтующем синтаксисе.Таких проблем нет с
className
.источник
props.class = 'css'
это полностью верноКоманда React фактически перейдет на,
class
а неclassName
в ближайшем будущем ( источник ):Почему переключение и отсутствие поддержки обоих?
Так что следите за обновлениями.
Я бы все равно использовал,
className
пока этого ожидает API.источник
class
их нельзя использовать во многих выражениях, потому что это ключевое слово.Просто чтобы пролить немного больше света на другие уже приведенные хорошие ответы:
http://buildwithreact.com/tutorial/jsx
Кроме того, процитирую zpao (участник React / сотрудник facebook)
источник
Документы React рекомендуют использовать
cannonical React attribute
имена вместо обычного именования Javascript, поэтому даже когда React позволяет передавать атрибуты в DOM, он выдает предупреждение.Из документов:
Known attributes with a different canonical React name: <div tabindex="-1" /> <div class="hi" /> React 15: Warns and ignores them. React 16: Warns but converts values to strings and passes them through. Note: always use the canonical React naming for all supported attributes.
источник
с июня 2019 года процесс изменения className на class был остановлен, его можно будет продолжить позже
вот сообщение разработчика facebook, объясняющее, почему
https://github.com/facebook/react/issues/13525
источник
Класс против className в reactJS Класс - это зарезервированное слово или ключевое слово в reactJS, как и функция в javascript. Вот почему мы используем слово «className» для обозначения класса.
источник
Команда React не дает реального объяснения этому, но можно предположить, что оно отличается от зарезервированного ключевого слова «класс» в Javascript с момента его появления в ES2015 +.
Даже если вы используете «класс» в конфигурации элемента при создании элемента, это не вызовет никаких ошибок компиляции / рендеринга.
источник
В ReactJS мы имеем дело с JSX, а не с HTML, как вы все знаете. JSX хочет, чтобы вы использовали className, потому что это базовый Javascript DOM API! Класс, являющийся зарезервированным ключевым словом в JS, не является основной причиной, по которой мы не используем class, а вместо этого используем className. Это потому, что мы говорим об этом DOM API
источник