6. state - Kite0301/react-my-app GitHub Wiki

ๆฌกใฏใ‚ฟใ‚นใ‚ฏใซๅทฆๅดใซ่กจ็คบใ•ใ‚Œใฆใ„ใ‚‹ใ‚ขใ‚คใ‚ณใƒณใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ™ใ‚‹ใจใ€ใƒใ‚งใƒƒใ‚ฏใƒžใƒผใ‚ฏใ‚’ไป˜ใ‘ใ‚‰ใ‚Œใ‚‹ใ‚ˆใ†ใซใ—ใพใ—ใ‚‡ใ†ใ€‚

Reactใฎใ‚ณใƒณใƒใƒผใƒใƒณใƒˆใงๆƒ…ๅ ฑใ‚’็ฎก็†ใ™ใ‚‹ๆ–นๆณ•ใจใ—ใฆใ€ใ€Œpropsใ€ใฎไป–ใซใ€Œstateใ€ใจใ„ใ†ใ‚‚ใฎใŒใ‚ใ‚Šใพใ™ใ€‚
ใ€Œpropsใ€ใŒใ‚ณใƒณใƒใƒผใƒใƒณใƒˆ้–“ใฎๅ€คใฎๅ—ใ‘ๆธกใ—ใงใ‚ใฃใŸใฎใซๅฏพใ—ใ€ใ€Œstateใ€ใฏใ‚ณใƒณใƒใƒผใƒใƒณใƒˆๅ†…ใง็Šถๆ…‹ใ‚’็ฎก็†ใ™ใ‚‹ใฎใซ็”จใ„ใพใ™ใ€‚

ไปŠใ€Listใ‚ณใƒณใƒใƒผใƒใƒณใƒˆใฏ2ใคๅ‘ผใณๅ‡บใ•ใ‚Œใฆใ„ใพใ™ใŒใ€ใใ‚Œใžใ‚Œใฎใ‚ณใƒณใƒใƒผใƒใƒณใƒˆใŒใ€Œใƒใ‚งใƒƒใ‚ฏใ•ใ‚Œใฆใ„ใ‚‹็Šถๆ…‹ใงใ‚ใ‚‹ใ‹๏ผŸใ€ใจใ„ใ†ๆƒ…ๅ ฑใ‚’ไฟๅญ˜ใ—ใฆใŠใ‘ใฐใ€ใใฎๅ€คใ‚’ใ‚‚ใจใซใ‚ขใ‚คใ‚ณใƒณใฎ่กจ็คบใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใ‚‹ใ“ใจใŒๅฏ่ƒฝใงใ™ใ€‚

ใพใšใ€ๅฟ…่ฆใชใ‚ณใƒผใƒ‰ใ‚’ๆ•ดใˆใพใ—ใ‚‡ใ†ใ€‚

class List extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      checked: false,
    }
  }

  render() {
    // ไธญ็•ฅ
  }
}

ไธŠ่จ˜ constructor ใจใ„ใ†้ƒจๅˆ†ใ‚’่ฟฝๅŠ ใ—ใฆใใ ใ•ใ„ใ€‚
constructor ใฏใ‚ณใƒณใƒใƒผใƒใƒณใƒˆใฎๅˆๆœŸ่จญๅฎšใ‚’่กŒใ†ใŸใ‚ใฎใ‚‚ใฎใงใ™ใ€‚

this.state = {
  checked: false,
}

ใจใ„ใ†้ƒจๅˆ†ใงใฏใ€state ใฎ checked ใฎๅ€คใฏใ€ๅˆๆœŸ็Šถๆ…‹ใงใฏ false ใงใ‚ใ‚‹ใ€ใจใ„ใ†ใ“ใจใ‚’ๆ„ๅ‘ณใ—ใฆใ„ใพใ™ใ€‚

render ๅ†…ใ‚‚stateใ‚’็”จใ„ใฆๆ›ธใๆ›ใˆใฆใฟใพใ—ใ‚‡ใ†ใ€‚

render() {
  return (
    <div className='list'>
      {this.state.checked
        ? <i className='fas fa-check-circle' />
        : <i className='far fa-circle' />
      }
      {this.props.title}
    </div>
  );
}

ใ“ใฎใ‚ˆใ†ใซๆ›ธใใ“ใจใงใ€this.state.checked ใฎๅ€คใŒ true ใฎๆ™‚ใฏใƒใ‚งใƒƒใ‚ฏใƒžใƒผใ‚ฏใŒใ€
ๅ€คใŒ false ใฎๆ™‚ใฏ้€šๅธธใฎโ—ฏใŒ่กจ็คบใ•ใ‚Œใ‚‹ใ‚ˆใ†ใซใชใ‚Šใพใ™ใ€‚


ใงใฏๆฌกใฏใ€ใ“ใฎใ‚ขใ‚คใ‚ณใƒณใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ™ใ‚‹ใจ this.state.checked ใฎๅ€คใŒ false ใ‹ใ‚‰ true ใธๅˆ‡ใ‚Šๆ›ฟใ‚ใ‚‹ใ‚ˆใ†ใซใ—ใฆใฟใพใ—ใ‚‡ใ†ใ€‚

ใพใšใ€ใ‚ขใ‚คใ‚ณใƒณ้ƒจๅˆ†ๅ…จไฝ“ใ‚’ <span> ใงๅ›ฒใฟใพใ™ใ€‚

<span>
  {this.state.checked
    ? <i className='fas fa-check-circle' />
    : <i className='far fa-circle' />
  }
</span>

ใ€Œ<span>ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใŸใ‚‰ใ€ใ€‡ใ€‡ใ‚’ใ™ใ‚‹ใ€ใจใ„ใ†ๅ‡ฆ็†ใ‚’ๆ›ธใ„ใฆใฟใพใ—ใ‚‡ใ†ใ€‚

changeChecked() {
  // ใ“ใ“ใซ<span>ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใŸๆ™‚ใฎๅ‡ฆ็†ใ‚’ๆ›ธใ
}

render() {
  return (
    <div className='list'>
      <span onClick={this.changeChecked.bind(this)}>
        {this.state.checked
          ? <i className='fas fa-check-circle' />
          : <i className='far fa-circle' />
        }
      </span>
      {this.props.title}
    </div>
  );
}
  1. <span>ใซonClickใ‚’่ฟฝๅŠ ใ—ใ€ใใฎๅ€คใซ{this.changeChecked.bind(this)}ใ‚’ๆŒ‡ๅฎšใ—ใพใ™
  2. renderใฎๅค–ใงchangeCheckedใจใ„ใ†ใƒกใ‚ฝใƒƒใƒ‰ใ‚’็”จๆ„ใ—ใพใ™

ใ“ใฎใ‚ˆใ†ใซใ™ใ‚‹ใ“ใจใงใ€<span> ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ™ใ‚‹ใจใ€changeCheckedใƒกใ‚ฝใƒƒใƒ‰ใฎไธญใฎๅ‡ฆ็†ใŒๅฎŸ่กŒใ•ใ‚Œใ‚‹ใ‚ˆใ†ใซใชใ‚Šใพใ™ใ€‚

ๅพŒใฏใ€changeChecked ใฎไธญใซ this.state.checked ใฎๅ€คใ‚’ๆ›ธใๆ›ใˆใ‚‹ๅ‡ฆ็†ใ‚’่ฟฝๅŠ ใ—ใพใ—ใ‚‡ใ†ใ€‚

changeChecked() {
  this.setState({checked: !this.state.checked})
}

state ใฎๅ€คใ‚’ๆ›ธใๆ›ใˆใ‚‹ใซใฏ this.setState({ๅๅ‰: ๅ€ค}) ใจใ—ใพใ™ใ€‚
ไปŠใฎ this.state.checked ใฎๅ€คใจใฏ้€†ใซใ—ใŸใ„ใฎใงใ€!this.state.checked ใจๅ…ˆ้ ญใซ ! ใ‚’ไป˜ใ‘ใฆใ„ใพใ™ใ€‚

ใ“ใฎๆ™‚็‚นใงใฎใ€Œindex.jsใ€ใฎใ‚ณใƒผใƒ‰ใฏ ใ“ใกใ‚‰ ใ‹ใ‚‰็ขบ่ชใงใใพใ™ใ€‚

โš ๏ธ **GitHub.com Fallback** โš ๏ธ