0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【React 入門】 計算アプリの作成

Posted at

参考にしたサイトのコードをリファクタリングしたので記録に残します。
https://tech.e3factory.com/programming/2586


//nameをsetStateと合わせる
<ValueInput name="value1" value={this.state.value1} valueChange={this.valueChange} />+
<ValueInput name="value2" value={this.state.value2} valueChange={this.valueChange} />=

valueChangeの共通化

①stateとnameのkeyを合わすことによって、「[name]」で共通化できる
②①で更新した値を元に合計値(answer)を再計算している
※単にsetStateを2回書くと更新前の値で合計が計算されてしまう為注意

 // 値が変更された時、計算を行う
  valueChange(e) {
    var name  = e.target.name;
    var value = e.target.value;
    // ①setStateで変更があった値を更新
    this.setState({
      [name]: value, //入力したValueInputの値を変更する([_name]value1、value2)
    }, () => {
      // このコールバック関数内で新しい状態にアクセスできる
      // ②setStateで合計を更新
      this.setState({
        answer: parseInt(this.state.value1) + parseInt(this.state.value2)
      });
    });
  }

全体コード

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';

class ValueInput extends React.Component {
  constructor(props) {
    super(props);
    this.handleChange = this.handleChange.bind(this);
  }

  // 値が変更された時の処理
  handleChange(e) {// element
    this.props.valueChange(e);
  }

  render() {
    return (
      <div>
        <input type="text" name={this.props.name} value={this.props.value} onChange={this.handleChange} />
      </div>
    );
  }
}

class ValueAnswer extends React.Component {
  render() {
    return (
      <span>{this.props.value}</span>
    );
  }
}

//計算回りの処理
class Calculator extends React.Component {
  constructor(props) {
    super(props);
    this.valueChange = this.valueChange.bind(this);
    this.state = {
      value1: 0, // ValueInputのnameと同じkeyとしている
      value2: 0, // ValueInputのnameと同じkeyとしている
      answer: 0,
    };
  }

  // 値が変更された時、計算を行う
  valueChange(e) {
    var name = e.target.name;
    var value = e.target.value;

    this.setState({
      [name]: value, //入力したValueInputの値を変更する([_name]value1、value2)
    }, () => {
      // このコールバック関数内で新しい状態にアクセスできる
      this.setState({
        answer: parseInt(this.state.value1) + parseInt(this.state.value2)
      });
    });
  }

  //計算のメソッド
  render() {
    return (
      <div>
        <ValueInput name="value1" value={this.state.value1} valueChange={this.valueChange} />+
        <ValueInput name="value2" value={this.state.value2} valueChange={this.valueChange} />=
        <ValueAnswer value={this.state.answer} />
      </div>
    );
  };
}

ReactDOM.render(<Calculator />, document.getElementById('root'));
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?