响应单击按钮的读取值

IT技术 javascript reactjs
2021-04-25 06:07:57

对不起,如果这个主题可能是另一个主题的副本,但我不明白我的代码做错了什么+我真的很新来react。我尝试了几种解决方案,但没有一个奏效。我会把我读过的一些帖子放在这里:

问题

我需要value使用 handleInput控制台.log里面的字符串

代码

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.log(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>
  </>
  );
}
4个回答

您以错误的方式发送和接收数据。首先,您需要使用onClick={this.handleInput}oronClick={(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.log(e.target.value);
}

您可以查看工作演示

首先,您的按钮当前在单击时不会执行任何操作,因此我们需要做的是为每个按钮添加一个 onClick:<Button onClick={this.handleInput} value="clear">C</Button>

这会将事件传递给handleInput.

要获取点击按钮的值,我们可以执行以下操作:

handleInput(el) {
    console.log(el.target.value);
}
  • 在 handleInput 函数中,您正在传递“props”但使用“this.props”
  • 每个按钮都应该有 onClick
  • 不应传递字符串 'value' 而应执行此操作 "onClick={(e) => this.handleInput(e)}"
  • 您可以使用 event.target.value 访问

您可以使用该event对象。就像是:

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

然后你可以在 onClick 事件上添加方法,同时传递event对象。

   onClick = {this.handleInput}