Включение значений массива в атрибуты компонента реакции

У меня есть текстовый компонент со следующим кодом



  return (
    <FormControl variant = "outlined" className = {classes.formControl}>
      <Grid container>
        <TextField
          id = {props.id}
          label = {props.label}
          defaultValue = {props.defaultValue || ""}
          variant = "outlined"
        />
      </Grid>
    </FormControl>
  );

props.attributes - это массив

props.attributes = ['required','disabled']

Я хочу, чтобы атрибуты были атрибутами текстового поля, как показано ниже.

        <TextField
          id = {props.id}
          label = {props.label}
          defaultValue = {props.defaultValue || ""}
          variant = "outlined"
          required
          disabled
        />
     

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

const attributes = props.attributes ? props.attributes.join(" ") : "";

а затем вставить строку в атрибуты текстового поля, подобные этому

<TextField
          id = {props.id}
          label = {props.label}
          defaultValue = {props.defaultValue || ""}
          variant = "outlined"
         {...attributes}
        />

Но не помогло

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
72
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

attributes должен быть объектом, поэтому, если вы конвертируете атрибуты в объект, который должен работать проверьте ниже код:

import React from "react";
import "./style.css";

export default function App() {
  const attr = { disabled: true, required: false };
  return (
    <div>
      <h1>Hello StackBlitz!</h1>
      <p>Start editing to see some magic happen :)</p>
      <input type = "text" {...attr} />
    </div>
  );
}

рабочая рабочий пример здесь

Для этого вам нужно отправить объект реквизита, например

props = { id: 'text-id', label: 'some-label', disable: true, required: false };

и передайте это компоненту, например

<TextField
    {...props}
/>

вот и все

Преобразовать массив в объект

Замените это

const attributes = props.attributes ? props.attributes.join(" ") : "";

к

const attributes = props.attributes
  ? props.attributes.reduce((acc, curr) => {
    if (!acc[curr]) {
      acc[curr] = true
    }
    return acc;
  }, {}) : "";

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