npm install -g create-react-app
create-react-app  reactlab1
cd reactlab1
ls
README.md        package-lock.json    public
node_modules        package.json        src
npm start
npm run build

Start Development server localhost:3000

Entry point src/index.js

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

ReactDOM.render(<App />, document.getElementById('root'));
registerServiceWorker();

reactdom จะทำหน้าที่ render component <App /> กับ div

component คือ app.js ภายในมี class extent component จาก react library และ มี function render() ที่ return html - jsx

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';

class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">Welcome to React</h1>
        </header>
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
      </div>
    );
  }
}

export default App;

create header Header.js

import React, {Component}  from 'react';

class Header extends Component {
    render(){
        return (
            <h1> Header component </h1>
        );
    }
}

export default Header

include in App.js, Export <-> import

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import Header from './Header';

class App extends Component {
  render() {
    return (
      <div>      # single root node
          <Header />
          <div className="App">
            <header className="App-header">
              <img src={logo} className="App-logo" alt="logo" />
              <h1 className="App-title">Welcome to React</h1>
            </header>
            <p className="App-intro">
              To get started, edit <code>src/App.js</code> and save to reload.
            </p>
          </div>
      </div>
    );
  }
}

export default App;export default App;

React state props

ส่งค่าผ่านทาง prop เป็นเหมือน Attribute this.props. ชื่อ

<Header currentUser="sawangpong" />


# ส่งไปยัง component
render() {
    <div>
       Header  {this.props.currentUser}
    </div>
}

# ส่งไปยัง component
render() {

    let {currentUser} = this.props   # แยกตัวแปรออกมาจาก this.props
                                     # กำหนดตัวแปร currentUser = this.props.currentUser
    return (
    <div>
       Header  {this.props.currentUser}
    </div>
    )
}

ข้อดีเมื่อมีการ assign หลายๆๆ ตัวแปร

destructoring systax

let {currentUser } = this.props
let currentUser = this.props.currentUser

let {currentUser , isLoggedIn }  = this.props

ส่งให้ Header จาก App

class App extends Component {
  render() {
    return (
      <div>
          <Header currentUser="sawangpong" />
          <div className="App">
            <header className="App-header">
              <img src={logo} className="App-logo" alt="logo" />
              <h1 className="App-title">Welcome to React</h1>
            </header>
            <p className="App-intro">
              To get started, edit <code>src/App.js</code> and save to reload.
            </p>
          </div>
          <Footer />
      </div>
    );
  }
}

รับค่า

import React, {Component}  from 'react';

class Header extends Component {
    render(){
        let {currentUser} = this.props;
        currentUser = "login as "  + currentUser;
        return (

            <h1> Header {currentUser} </h1>
        );
    }
}

export default Header

Logic หากมีการ login จึงค่อยโชว์ชื่อออกมา

class Header extends Component {
    render(){
        let {currentUser, isLoggedIn} = this.props;
        currentUser = "login as "  + currentUser;
        return (

            <h1> Header {isLoggedIn && currentUser} </h1>  # logic
        );
    }
}


{isLoggedIn && currentUser}
if  isLoggedIn  display currentUser

True  &&  True



class App extends Component {
  render() {
    return (
      <div>
          <Header currentUser="sawangpong" isLoggedIn/>
          <div className="App">
            <header className="App-header">
              <img src={logo} className="App-logo" alt="logo" />
              <h1 className="App-title">Welcome to React</h1>
            </header>
            <p className="App-intro">
              To get started, edit <code>src/App.js</code> and save to reload.
            </p>
          </div>
          <Footer />
      </div>
    );
  }
}


<Header currentUser="sawangpong" isLoggedIn/>
แค่การกำหนด ก็มีค่าเป็น True  ไม่ต้อง isLoggedIn={true}

props พ่อส่งให้ลูก

State ลูกถือไว้เอง

ใช้งานที่ footer มาแล้วกี่วินาที การกำหนดค่าให้กับ state กำหนดค่าให้แก่ contructor function เพื่อส่งค่าให้แก่ parent

constructor(props){
    super(props)
    this.state =  {
        time: 0
    }
    setInterval(()=>{
        this.setState({
            time: this.state.time+1
        })
    }, 1000);
}

let {time} = this.state
return (
    <div> Footer {time} </div>
)

setInterval() ทำงาน บางอย่างในช่วงเวลาที่กำหนด

new Footer.js

import React, {Component} from "react"

class Footer extends Component {

    constructor(props){
        super(props)
        this.state = {
            time: 0
        }
        setInterval(()=>{
            this.setState({
                time: this.state.time+1
            })
        },1000)
    }
    render(){
        let {time} = this.state 
        return(
            <h1> Footer  {time} </h1>
        );
    }
}


export default Footer

results matching ""

    No results matching ""