Button をクリック時に state をsetState で変更する

先ほど書いた App では、 state は用いているが、state を変更する仕組みはない。 さらに this.setState() を用いて state を変更する仕組みを追加する。

動画: https://youtu.be/Xg0W0CaXCYE コード: https://codesandbox.io/s/l52wlq708z

import React from "react";
import { render } from "react-dom";

class Human extends React.Component {
  constructor(props) {
    super(props);
    this.state = { name: "Nakanishi" };
  }

  render() {
    // onClick アトリビュートにコールバック(関数)を指定することで、
    // クリック時にメソッドを実行させることができる
    return <h2 onClick={this.onClickButton}>{this.state.name}</h2>;
  }

  // このメソッドを h2 クリック時に発動させる
  onClickButton = () => {
    // setState で state を更新する
    // this.setState() の引数には、変更したい state の対象を
    // オブジェクトで指定する
    this.setState({ name: this.state.name + "さん" });
  };
}

render(<Human />, document.getElementById("root"));

onClick アトリビュートを用いて、クリック時に何かを実行させる

  • h2 をクリックした時に、onClickButton というメソッドを実行させる。
  • クリックした時に何かをさせるには、onClick アトリビュートを用いる。
  • JSX 内で使用される onClick, onChange, onSubmit 等に指定するメソッド(コールバック)は、= () => というアローファンクションに似た方式で書くこと。そうしないと this が意図しない対象をさすためにエラーとなる。
import React from "react";
import { render } from "react-dom";

class Human extends React.Component {
  constructor(props) {
    super(props);
    this.state = { name: "Nakanishi" };
  }

  render() {
    // onClick アトリビュートにコールバック(関数)を指定することで、
    // クリック時にメソッドを実行させることができる
    return <h2 onClick={this.onClickButton}>{this.state.name}</h2>;
  }

  // このメソッドを h2 クリック時に発動させる
  // JSX 内で使用される onClick, onChange, onSubmit 等に指定するメソッド(コールバック)
  // は、= () => というアローファンクションに似た方式で書くこと
  // そうしないと this が意図しない対象をさすためにエラーとなる
  onClickButton = () => {
    alert('click')
  };
}

render(<Human />, document.getElementById("root"));

setState を用いて、state を更新する

  • this.setState() というメソッドを用いて、state を更新する。
  • このメソッドは自分では書いていないが、React.Component を extends (継承)した際に受け継がれたもの。
  • this.setState() の引数には、state のうち、変更したいオブジェクトを指定する。(上書きされる)
import React from "react";
import { render } from "react-dom";

class Human extends React.Component {
  constructor(props) {
    super(props);
    this.state = { name: "Nakanishi" };
  }

  render() {
    return <h2 onClick={this.onClickButton}>{this.state.name}</h2>;
  }

  onClickButton = () => {
    // setState で state を更新する
    // this.setState() の引数には、変更したい state の対象を
    // オブジェクトで指定する
    this.setState({ name: this.state.name + "さん" });
  };
}

render(<Human />, document.getElementById("root"));

results matching ""

    No results matching ""