簡體   English   中英

為什么輸入在 React 中不返回任何內容?

[英]Why is input not returning anything in React?

我是 React 的初學者,我正在嘗試用它制作小應用程序。 事實上,這是我在 React 中制作的第一個應用程序,但我遇到了一個問題。

我正在制作一個小型應用程序,可以輸入數字並對其進行加、減或乘運算,即計算器。 這是代碼。

 const { Component } = React; class App extends React.Component { state = { num1: 0, num2: 0, answer: 0, equation: "", }; handleAdd1 = (number) => { this.setState({ num1: number }); }; handleAdd2 = (number2) => { this.setState({ num2: number2 }); }; handleClear = () => { this.setState({ num1: 0, num2: 0, answer: 0 }); }; handlePlus = (sign) => { switch (sign) { case "+": this.setState({ answer: this.state.num1 + this.state.num2 }); break; case "-": this.setState({ answer: this.state.num1 - this.state.num2 }); break; case "x": this.setState({ answer: this.state.num1 * this.state.num2 }); break; } }; handleInput = (event) => { this.setState({ equation: event.target.value }); }; render() { return ( <div> <div> <h1>{this.state.num1}</h1> <button onClick={() => this.handleAdd1(1)}> 1 </button> <button onClick={() => this.handleAdd1(2)}> 2 </button> <button onClick={() => this.handleAdd1(3)}> 3 </button> <button onClick={() => this.handleAdd1(4)}> 4 </button> <button onClick={() => this.handleAdd1(5)}> 5 </button> <button onClick={() => this.handleAdd1(6)}> 6 </button> <button onClick={() => this.handleAdd1(7)}> 7 </button> <button onClick={() => this.handleAdd1(8)}> 8 </button> <button onClick={() => this.handleAdd1(9)}> 9 </button> <button onClick={() => this.handleAdd1(0)}> 0 </button> </div> <div> <h1>{this.state.num2}</h1> <button onClick={() => this.handleAdd2(1)}> 1 </button> <button onClick={() => this.handleAdd2(2)}> 2 </button> <button onClick={() => this.handleAdd2(3)}> 3 </button> <button onClick={() => this.handleAdd2(4)}> 4 </button> <button onClick={() => this.handleAdd2(5)}> 5 </button> <button onClick={() => this.handleAdd2(6)}> 6 </button> <button onClick={() => this.handleAdd2(7)}> 7 </button> <button onClick={() => this.handleAdd2(8)}> 8 </button> <button onClick={() => this.handleAdd2(9)}> 9 </button> <button onClick={() => this.handleAdd2(0)}> 0 </button> </div> <div> <button onClick={() => this.handlePlus("+")}>+</button> <button onClick={() => this.handlePlus("-")}>-</button> <button onClick={() => this.handlePlus("x")}>x</button> </div> <div> <button onClick={this.handleClear}>Clear</button> <h1>{this.state.answer}</h1> <input type="text"></input> <button onClick={() => this.handleInput}>Enter !</button> <button onClick={() => console.log(this.state.equation)}> Log in console </button> </div> </div> ); } } ReactDOM.render(<App />, document.body);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>

如果你查看程序,你會看到有幾個數字,如果你點擊它們並添加,你會得到一個 h1 的結果。 但是,這並不是很好,因為您只能添加個位數。 因此,如您所見,我添加了一個輸入,它將獲取等式並將其記錄在控制台中(暫時)。 但遺憾的是,這是返回未定義。 我能做些什么來解決這個問題嗎?

您需要使輸入成為受控組件。 您可以通過監聽onChange事件並將值傳遞給 value 屬性來制作輸入控制組件

<input type="text" value={this.state.equation} onChange={(e)=>this.setState({equation: e.target.value})}

現在你將得到等式

您忘記映射輸入標簽的值,您可以將其與狀態綁定,如果您不熟悉反應,您應該開始使用鈎子,這是現在更清晰的方法,
這是完整的工作解決方案,
https://codesandbox.io/embed/inspiring-tesla-9sjop?fontsize=14&hidenavigation=1&theme=dark

import React, { Component } from "react";

class App extends React.Component {
  state = {
    num1: 0,
    num2: 0,
    answer: 0,
    equation: "",
    value: ""
  };

  handleChange = (e) => {
    this.setState({ equation: e.target.value });
  };

  handleAdd1 = (number) => {
    this.setState({ num1: number });
  };

  handleAdd2 = (number2) => {
    this.setState({ num2: number2 });
  };

  handleClear = () => {
    this.setState({ num1: 0, num2: 0, answer: 0 });
  };

  handlePlus = (sign) => {
    switch (sign) {
      case "+":
        this.setState({ answer: this.state.num1 + this.state.num2 });
        break;

      case "-":
        this.setState({ answer: this.state.num1 - this.state.num2 });
        break;

      case "x":
        this.setState({ answer: this.state.num1 * this.state.num2 });
        break;
    }
  };

  handleInput = (event) => {
    this.setState({ equation: event.target.value });
  };

  render() {
    return (
      <div>
        <div>
          <h1>{this.state.num1}</h1>
          <button onClick={() => this.handleAdd1(1)}> 1 </button>
          <button onClick={() => this.handleAdd1(2)}> 2 </button>
          <button onClick={() => this.handleAdd1(3)}> 3 </button>
          <button onClick={() => this.handleAdd1(4)}> 4 </button>
          <button onClick={() => this.handleAdd1(5)}> 5 </button>
          <button onClick={() => this.handleAdd1(6)}> 6 </button>
          <button onClick={() => this.handleAdd1(7)}> 7 </button>
          <button onClick={() => this.handleAdd1(8)}> 8 </button>
          <button onClick={() => this.handleAdd1(9)}> 9 </button>
          <button onClick={() => this.handleAdd1(0)}> 0 </button>
        </div>

        <div>
          <h1>{this.state.num2}</h1>
          <button onClick={() => this.handleAdd2(1)}> 1 </button>
          <button onClick={() => this.handleAdd2(2)}> 2 </button>
          <button onClick={() => this.handleAdd2(3)}> 3 </button>
          <button onClick={() => this.handleAdd2(4)}> 4 </button>
          <button onClick={() => this.handleAdd2(5)}> 5 </button>
          <button onClick={() => this.handleAdd2(6)}> 6 </button>
          <button onClick={() => this.handleAdd2(7)}> 7 </button>
          <button onClick={() => this.handleAdd2(8)}> 8 </button>
          <button onClick={() => this.handleAdd2(9)}> 9 </button>
          <button onClick={() => this.handleAdd2(0)}> 0 </button>
        </div>

        <div>
          <button onClick={() => this.handlePlus("+")}>+</button>
          <button onClick={() => this.handlePlus("-")}>-</button>
          <button onClick={() => this.handlePlus("x")}>x</button>
        </div>

        <div>
          <button onClick={this.handleClear}>Clear</button>
          <h1>{this.state.answer}</h1>
          <input
            type="text"
            value={this.state.equation}
            onChange={this.handleChange}
          ></input>
          <button onClick={() => this.handleInput}>Enter !</button>
          <button onClick={() => console.log(this.state.equation)}>
            Log in console
          </button>
        </div>
      </div>
    );
  }
}

export default App;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM