Learning Full-Stack JavaScript Development: MongoDB, Node and React


3. React Basics


010 React components

$ npm install --save prop-types


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import React from 'react';
import ReactDOM from 'react-dom';
import PropTypes from 'prop-types';

const App = (props) => {
return (
<h2 className="text-center">
{props.headerMessage}
</h2>
);
};

App.propTypes = {
headerMessage: PropTypes.string.isRequired
};

App.defaultProps = {
headerMessage: 'Hello!'
}

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

// ReactDOM.render(
// <App headerMessage="Hello props"/>,
// document.getElementById('root')
// );


$ npm run dev
$ npm start


011 Component composability


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import React from 'react';
import ReactDOM from 'react-dom';
import PropTypes from 'prop-types';

const Header = ({ message }) => {
return (
<h2 className="Header text-center">
{ message }
</h2>
);
};

Header.propTypes = {
message: PropTypes.string.isRequired
};

const App = () => {
return (
<h2 className="App">
<Header message="Naming Contests" />
<div>
...
</div>
</h2>
);
};

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


012 Components with modules


App.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import React from 'react';
import Header from './Header';

const App = () => {
return (
<h2 className="App">
<Header message="Naming Contests" />
<div>
...
</div>
</h2>
);
};

export default App;


Header.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import React from 'react';
import PropTypes from 'prop-types';

const Header = ({ message }) => {
return (
<h2 className="Header text-center">
{ message }
</h2>
);
};

Header.propTypes = {
message: PropTypes.string.isRequired
};

export default Header;


index.js

1
2
3
4
5
6
7
8
9
import React from 'react';
import ReactDOM from 'react-dom';

import App from './components/App';

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


013 Component state


App.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import React from 'react';
import Header from './Header';

class App extends React.Component {
  
 constructor(props){
super(props);
this.pageHeader = 'Naming Contests';
this.state = { test: 42 };
}

    render() {
        return (
            <h2 className="App">
                <Header message= {this.pageHeader} />
                <div>
                    {this.state.test}
                </div>
            </h2>
        );
    }

};

export default App;


014 Component life cycle

componentDidMount() {

}

componentWillUnmount() {

}