Реагировать на прочитанное значение нажатой кнопки

Извините, если эта тема, вероятно, является копией другой, но я не понимаю, что я делаю не так со своим кодом + я действительно новичок, чтобы отреагировать. Я пробовал несколько решений, но ни одно из них не помогло. Я помещу сюда часть сообщения, которое я прочитал:

Проблема

Мне нужно console.info строку внутри value с помощью handleInput

Код

import React, {Component} from 'react';
import Button from './Button';
import Screen from './screen';
import './keyboard.css'

class NumberKeyboard extends Component {
    constructor(props){
        super(props)
        this.state = {
            operations: []
        }

    }

handleInput(props) {
    const buttonValue= this.props.value;
    console.info(buttonValue)
}


    render() {


        return (
            <div className = "keyboard">
                <div className = "column"></div>
                <div className = "column">
                    <div className = "keyboardRow roundBorder" value = {"example"} onClick = {() => this.handleInput('value')}>
                        <Screen className = "crystalScreen"></Screen>
                        <Button value = "clear" >C</Button> 
                        <Button value = "±">±</Button>
                        <Button value = ".">.</Button>
                        <Button value = "">+</Button>
                    </div>
                    <div className = "keyboardRow">
                        <Button value = "clear">1</Button>
                        <Button value = "2">2</Button>
                        <Button value = "3">3</Button>
                        <Button value = "-">-</Button>
                    </div>
                    <div className = "keyboardRow">
                        <Button value = "4">4</Button>
                        <Button value = "5">5</Button>
                        <Button value = "6">6</Button>
                        <Button value = "*">X</Button>
                    </div>
                    <div className = "keyboardRow lastRow">
                        <Button value = "7">7</Button>
                        <Button value = "8">8</Button>
                        <Button value = "9">9</Button>
                        <Button value = "%">÷</Button>
                    </div>
                </div>

                <div className = "column"></div>
            </div>
        )
    }
}

export default NumberKeyboard;

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

--------------------------- ОБНОВИТЬ ---------------------- ---

В связи с посещением этого поста я хочу немного обновить и показать пример, основанный также на хуках:

import React, { useState } from 'react';
import KeyboardRow from 'src/components/keyboardRow'; /* ideally this
 should contain the buttons element. i'm writing in this way just to stay 
 closer to the initial question */  

function NumberKeyboard() {
  const [selectedNumber, setSelectedNumber] = useState(0);

  const selectNumber = numberSelected => {
       setSelectedNumber(numberSelected)
  }

  return (
  <>
    <KeyboardRow >
       <Button onClick = {selectNumber} value = "7">7</Button>
       <Button onClick = {selectNumber} value = "8">8</Button>
       <Button onClick = {selectNumber} value = "9">9</Button>
    </KeyboardRow >
    <div>{selectedNumber}<div>
  </>
  );
}
Поведение ключевого слова "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) для оценки ваших знаний,...
12
0
30 106
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете использовать объект event. Что-то вроде:

    handleInput = e => {
      const buttonValue = e.target.value;
      console.info(buttonValue);
      //some logic
}

А затем вы можете добавить метод в событие onClick, также передав объект event.

   onClick = {this.handleInput}

Прежде всего, ваши кнопки в настоящее время ничего не делают при нажатии, поэтому нам нужно добавить onClick к каждой из ваших кнопок: <Button onClick = {this.handleInput} value = "clear">C</Button>.

Это передаст событие в handleInput.

Чтобы получить значение нажатой кнопки, мы можем сделать:

handleInput(el) {
    console.info(el.target.value);
}
Ответ принят как подходящий

Вы отправляете и получаете данные неверным способом. Во-первых, вам нужно использовать onClick = {this.handleInput} или onClick = {(e) => this.handleInput(e,'value')} вместо onClick = {() => this.handleInput('value')}, потому что вы отправляете строку 'value' в функции.

<div className = "keyboardRow roundBorder" value = {"example"} onClick = {e => this.handleInput(e, "value")} >

А затем получить следующими способами:

handleInput(e) {
    console.info(e.target.value);
}

Вы можете проверить рабочий демонстрация.

Могу я кое-что спросить? Просто чтобы быть уверенным, что я действительно понимаю, что вы написали (потому что да, это работает): onClick = {e => this.handleInput (e, "value")} буква "e" означает кнопку для детей, которую я нажимаю?

Legeo 27.11.2018 12:33

e - событие, которое создается на основе вашего щелчка по текущему элементу.

Irshad Babar 03.05.2020 00:03
  • В функции handleInput вы передавали "props", но использовали "this.props"
  • onClick должен быть для каждой кнопки
  • Не следует передавать строку 'value', а сделайте это "onClick = {(e) => this.handleInput (e)}"
  • вы можете получить доступ с помощью event.target.value

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