Реакция с Typescript: свойство «имя» не существует для типа «DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>»

Я начал использовать React с Typescript и пытаюсь добавить свойство «name» в «div», но Typescript жалуется на это и не позволяет мне добавить его, потому что этого свойства не существует.

Это полное сообщение, которое я получаю:

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

Как я могу это решить? Вот пример файла .tsx:

import React from "react";

export default function TestComponent() {
    return <div name="component-name">Test</div>;
}

Я использую реактивную прокрутку библиотеки, для которой требуется свойство имени в компоненте.

Удалите name="component-name" из исходного кода. ??‍♂️ (Это похоже на XY-проблема. Вы пытаетесь решить загадочная проблема, добавляя недопустимый атрибут имени в div, но мы не можем сказать вам, как вы должны решать эту проблему, потому что вы держите ее в тайне и вместо этого сосредоточившись на попытке взломать атрибут name там, где ему не место).

Quentin 17.05.2022 14:39

Чтобы скопировать из МДН, name действителен только для: <button>, <form>, <fieldset>, <iframe>, <input>, <keygen>, <object>, <output>, <select>, <textarea>, <map>, <meta>, <param>

DBS 17.05.2022 14:40

Я использую реактивную прокрутку библиотеки, для которой требуется свойство имени в компоненте.

Dave 17.05.2022 14:40
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Введение в технологический стек Twitch
Введение в технологический стек Twitch
В этой статье мы подробно рассмотрим стек Twitch, который подразделяется на следующий набор технологий:
8 полезных HTML-тегов, которые лучше использовать вместо <div>
8 полезных HTML-тегов, которые лучше использовать вместо <div>
Когда я только начинал изучать html, я использовал div для всего, это был один из первых тегов, которые я выучил, и казалось, что он работает в любой...
HTML5: API локального хранилища (Local Storage)
HTML5: API локального хранилища (Local Storage)
LocalStorage - это простой способ хранения данных в браузере пользователя.
Доступность HTML - программирование с инклюзивной перспективой
Доступность HTML - программирование с инклюзивной перспективой
Представьте, что вы хотите поехать на пляж. Представьте, что вы упорно трудились весь год и заслужили это. Прибыв на место, вы обнаруживаете, что...
Именование классов CSS: Конвенция именования BEM
Именование классов CSS: Конвенция именования BEM
Сопровождаемость кода, сама по себе, является пульсирующим эффектом нескольких факторов. Когда часть программного обеспечения читабельна, ясна,...
1
3
20
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ошибка верна, HTMLDivElement не имеет свойства name, а name является недопустимым атрибутом для div элементы.

Если вы хотите поместить в элемент нестандартную, невидимую информацию, используйте data-* атрибут:

<div data-name="component-name">Test</div>

... и если вам нужно получить его значение из элемента DOM (например, через ссылку), используйте getAttribute или dataset.

Ответ принят как подходящий

I'm using the library react-scroll that requires a name property on the component.

Вы неправильно прочитали документацию.

Вот цитата из него:

var Scroll   = require('react-scroll');
var Element  = Scroll.Element;
var scroller = Scroll.scroller;

<Element name="myScrollToElement"></Element>

Для этого требуется реквизит name для компонента Element (который предоставляется библиотекой), нет для div.

Ну вот, между нами мы ответили на X и Y. ;-) Но твой вариант более полезен. Хороший!

T.J. Crowder 17.05.2022 14:46

Другие вопросы по теме