Girinのブログ

日常をつづる

2021/06/06 Reactの勉強を少しした。

勉強したことをメモがわりにブログを書く。

やりたいことはReactDOM.render()を複数個作ってみたい。さてやってみる。 詰まったとこ

import React,{ Component } from 'react';
import ReactDOM from 'react-dom';

class App extends Component {
  render(){
    return(
      <div>
        <input type="text" />
        <button onClick={this.handleClick}>SEND</button>
        {this.state.tenki}
      </div>
    );
  }

  handleClick(){
    ReactDOM.render(
      <React.StrictMode>
        <Add />
      </React.StrictMode>,
      document.getElementById('root')
    );
    
    
  }

  constructor(props) {
    super(props);
    this.state={tenki: <div>aaaa</div>};
    this.handleClick = this.handleClick.bind(this);
  }
  
}

class Add extends Component {
  render(){
    return(
      <div>
        <h1>aaaa</h1>
        <input type="text" />
      </div>
    );
  }
}

export default App;

これで困ったことはボタンを押すとAppの下にAddを作りたかったのだがこれを実行するとAppを上書きする形で更新されてしまう。 とりあえずの解決

import React,{ Component } from 'react';
import ReactDOM from 'react-dom';

class App extends Component {
  render(){
    return(
      <div>
        <input type="text" />
        <button onClick={this.handleClick}>SEND</button>
        {this.state.tenki}
        <div id='root1'></div>
      </div>
    );
  }

  handleClick(){
    ReactDOM.render(
      <React.StrictMode>
        <Add />
      </React.StrictMode>,
      document.getElementById('root1')
    );
    
    
  }

  constructor(props) {
    super(props);
    this.state={tenki: <div>aaaa</div>};
    this.handleClick = this.handleClick.bind(this);
  }
  
}

class Add extends Component {
  render(){
    return(
      <div>
        <h1>aaaa</h1>
        <input type="text" />
      </div>
    );
  }
}

export default App;

ようするにDOMを付ける場所(id=root)のところにするともともとあったDOMを上から更新してしまうみたい。 なのであたらしいidをもったdivを作ってそこにすると行けた。 果たしてこれがプログラム的に正しいのかは知らない。 まあこれでいろいろいじっていけばできそうだけどどうでしょう・・・。あと久しぶりにMarkdown記法を使った。 では・・・。