Определить нажатый элемент и обновить значение aria-checked в React

render(){
  return (
    <div>
      this.data.map(item=> {
         <div aria-checked = "true/false">{item}<div>
      })
    </div>
  )
}

Для приведенного выше кода я хочу написать обработчик onClick, который изменяет значение aria-checked на true, в зависимости от выбранного / нажатого элемента. Если выбран один элемент, это aria-checked будет true, а остальные - false.

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

Пожалуйста, предоставьте минимальный воспроизводимый пример. Вы должны показать класс компонента и конструктор. Также покажите, как инициализируется this.data.

Code-Apprentice 12.04.2018 06:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
1 042
1

Ответы 1

вы можете сделать по setAttribute, здесь:

constructor() {
    super();
    this.data = ["hello", "world"];
}

handleClick = (e) => {
    const currentAriaChecked = (e.currentTarget.getAttribute("aria-checked") === 'true');
    e.currentTarget.setAttribute("aria-checked", !currentAriaChecked);
};

render() {
    return (
      <div>
        {          
          this.data
            .map(item => (<div aria-checked = "true" onClick = {this.handleClick}>{item}</div>))
        }
      </div>
    );
}

Обновлено

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

  render() {
    return (
      <div>
        {          
          this.data
            .map(item => (<Check>{item}</Check>))
        }
      </div>
    );
  }

ваш компонент check

state = {
  isChecked: false
}

handleClick = (e) => {
  this.setState((prevState,props) => {
    return {isChecked: !prevState.isChecked }
  })
};

render() {
  return (
    <div aria-checked = {this.state.isChecked} onClick = {this.handleClick}>
      {this.props.children} {this.state.isChecked.toString()}
    </div>
  );
}

см. детская площадка.

есть ли более реактивный способ сделать это?

blankface 12.04.2018 08:37

да, вы можете создать component для `aria-checked = " true "`, используя state внутри него для обработки функции переключения.

hendrathings 12.04.2018 08:49

также машинописная ошибка во второй строке handleClick [ts] Argument of type 'boolean' is not assignable to parameter of type 'string' на !currentAriaChecked

blankface 12.04.2018 08:50

Я думал, вы используете es6. вам нужно изменить на подходящий typescript

hendrathings 12.04.2018 08:53

второй параметр в setAttribute принимает только строку. как я могу заставить его принимать логическое значение currentAriaChecked?

blankface 12.04.2018 08:55

см. мое обновление для машинописного текста или проверьте stackblitz.com/edit/react-ts-alewk7?file=Check.tsx

hendrathings 12.04.2018 09:16

Благодарю. но это не совсем то, что я искал. если у меня есть 2 div с aria-checked, я хочу иметь возможность выбрать один из div, переключите его aria-checked на true. снова, если я выберу другой div, я хочу, чтобы false был aria-checked предыдущего div, но установил его на true для текущего.

blankface 12.04.2018 13:36

Это твоя очередь

hendrathings 12.04.2018 15:00

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