鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

react.jsいろいろと試そう

サンプルを改造して動かす。
2つあるinputどちらかを変更してもコンポーネントAおよびコンポーネントBの
renderが呼ばれている。
対応する子だけが呼ばれていると思っていた。

/** @jsx React.DOM */
var A =  React.createClass({
  render: function() {
    console.log("A render");
    return <div> {this.props.name}
    </div>
    ;
  }
});
var B =  React.createClass({
  render: function() {
    console.log("B render");
    return <div> {this.props.name}
    </div>
    ;
  }
});
var MyForm =  React.createClass({
  getInitialState: function() {
    return {helloToA: "Hello World",helloToB: "Hello React"};
  },
  handleChangeA: function (event){
    this.setState({
      helloToA: event.target.value
    });
  },
  handleChangeB: function (event){
    this.setState({
      helloToB: event.target.value
    });
  },
  submitHandler: function (event) {
    event.preventDefault();
    alert( this.state.helloToA + this.state.helloToB);
  },
  render: function() {
    return <form onSubmit={this.submitHandler}>
      <input
        type="text"
        value={this.state.helloToA}
        onChange={this.handleChangeA} />
      <br />
      <input
        type="text"
        value={this.state.helloToB}
        onChange={this.handleChangeB} />
      <br />
      <button type="submit">送信</button>
      <A name={this.state.helloToA}></A><B name={this.state.helloToB}></B>
    </form>
    ;
  }
});

React.renderComponent(<MyForm name="React-Exam" />, document.getElementById('content'));