|  | @@ -0,0 +1,141 @@
 | 
	
		
			
				|  |  | +# React for Beginners
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +* Video course: https://reactforbeginners.com/account
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +## Video 1: Tooling
 | 
	
		
			
				|  |  | +* create-react-app
 | 
	
		
			
				|  |  | +* use Webpack
 | 
	
		
			
				|  |  | +* Sublime editor
 | 
	
		
			
				|  |  | +* React dev tools
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +## Video 2: Thinking and Understanding React Components
 | 
	
		
			
				|  |  | +*  React applications are split into components which share information over different ways like state and properties.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +## Video 3: Our First React Component
 | 
	
		
			
				|  |  | +* Write first component
 | 
	
		
			
				|  |  | +```javascript
 | 
	
		
			
				|  |  | +// MyComponent.js
 | 
	
		
			
				|  |  | +import React from 'react'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +class MyClass extends React.Component {
 | 
	
		
			
				|  |  | +	render (
 | 
	
		
			
				|  |  | +		return(
 | 
	
		
			
				|  |  | +			<div></div>
 | 
	
		
			
				|  |  | +		)
 | 
	
		
			
				|  |  | +	)
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default MyClass
 | 
	
		
			
				|  |  | +```
 | 
	
		
			
				|  |  | +* Render it on the HTML
 | 
	
		
			
				|  |  | +```javascript
 | 
	
		
			
				|  |  | +// index.js
 | 
	
		
			
				|  |  | +import React from 'react'
 | 
	
		
			
				|  |  | +import { render } from 'react-dom'
 | 
	
		
			
				|  |  | +import MyComponent from './MyComponent'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +render(<StorePicker />, document.getElementById('main'))
 | 
	
		
			
				|  |  | +```
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +## Video 4: Write HTML with JSX
 | 
	
		
			
				|  |  | +* You can write HTML code directly in return functions within parentheses.
 | 
	
		
			
				|  |  | +* Wes blog post about how to use emmet in babel
 | 
	
		
			
				|  |  | +* need to replace class tags with className, because class is sth different in JS
 | 
	
		
			
				|  |  | +* Can only return one parent element (need to wrap the children)
 | 
	
		
			
				|  |  | +* HTML comments have to be inside {/**/} in JSX *AND* inside parent element.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +## Video 5: CSS
 | 
	
		
			
				|  |  | +* Can be in HTML head
 | 
	
		
			
				|  |  | +* Can also be included with 
 | 
	
		
			
				|  |  | +```javascript
 | 
	
		
			
				|  |  | +import './style.css'
 | 
	
		
			
				|  |  | +```
 | 
	
		
			
				|  |  | +* Processed by Webpack
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +## Video 6: Create Application Layout with Components
 | 
	
		
			
				|  |  | +* decide how to organize the app with sub-components
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +## Video 7: Passing Dynamic Data with props
 | 
	
		
			
				|  |  | +* add attributes to components
 | 
	
		
			
				|  |  | +```javascript
 | 
	
		
			
				|  |  | +<Component myProp='data' myObj={JSObj} onClick={doSth}>
 | 
	
		
			
				|  |  | +```
 | 
	
		
			
				|  |  | +* access variables via props
 | 
	
		
			
				|  |  | +```javascript
 | 
	
		
			
				|  |  | +class MyComponent extends React.Component {
 | 
	
		
			
				|  |  | +	render(
 | 
	
		
			
				|  |  | +		return(
 | 
	
		
			
				|  |  | +			<p>{this.props.myProp}</p>
 | 
	
		
			
				|  |  | +			<p>{this.props.myObj}</p>
 | 
	
		
			
				|  |  | +			<p>{this.props.onClick}</p>
 | 
	
		
			
				|  |  | +		)
 | 
	
		
			
				|  |  | +	)
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +```
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +## Video 8: Stateless Functional Components
 | 
	
		
			
				|  |  | +* If component has just a return function, you can use a stateless functional component
 | 
	
		
			
				|  |  | +* replace class MyClass ... with
 | 
	
		
			
				|  |  | +```javascript
 | 
	
		
			
				|  |  | +const MyFunction = (props) => {
 | 
	
		
			
				|  |  | +	return(
 | 
	
		
			
				|  |  | +		<p>{props.myProp}</p>
 | 
	
		
			
				|  |  | +		<p>{props.myObj}</p>
 | 
	
		
			
				|  |  | +		<p>{props.onClick}</p>		
 | 
	
		
			
				|  |  | +	)
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +```
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +## Video 9: Routing with React Router
 | 
	
		
			
				|  |  | +* Don't render component directly, but router
 | 
	
		
			
				|  |  | +```javascript
 | 
	
		
			
				|  |  | +// index.js
 | 
	
		
			
				|  |  | +import { BrowserRouter, Match, Miss } from 'react-router'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +const Root = () => {
 | 
	
		
			
				|  |  | +	return (
 | 
	
		
			
				|  |  | +		<BrowserRouter>
 | 
	
		
			
				|  |  | +			<Match exactly pattern='/' component={MyComponent}/>
 | 
	
		
			
				|  |  | +			<Match pattern='/mystuff/:myarg' component={MyStuff} />
 | 
	
		
			
				|  |  | +			<Miss component={OhNo} />
 | 
	
		
			
				|  |  | +		</BrowserRouter>
 | 
	
		
			
				|  |  | +	)
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +render(<Root />, document.getElementById('main'))
 | 
	
		
			
				|  |  | +```
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +## Video 10: Helper and Utility Functions
 | 
	
		
			
				|  |  | +* Organize helper functions in separate files.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +## Video 11: Working with React Events
 | 
	
		
			
				|  |  | +* Works as regular JS events, but adds cross-browser compatibility
 | 
	
		
			
				|  |  | +* Think about what event to handle
 | 
	
		
			
				|  |  | +* Think about, at what level the event should be handeled and pass the function down to the component via props.
 | 
	
		
			
				|  |  | +* Reference form elements as follows:
 | 
	
		
			
				|  |  | +```javascript
 | 
	
		
			
				|  |  | +<input type='text' ref={(input)=>{ this.whateverName = input }}
 | 
	
		
			
				|  |  | +```
 | 
	
		
			
				|  |  | +* now you can access it through 'this'.
 | 
	
		
			
				|  |  | +* You have to bind 'this' in functions other than render
 | 
	
		
			
				|  |  | +* See this example with event handling:
 | 
	
		
			
				|  |  | +```javascript
 | 
	
		
			
				|  |  | +class MyClass extends React.Component {
 | 
	
		
			
				|  |  | +	constructor () {
 | 
	
		
			
				|  |  | +		super()
 | 
	
		
			
				|  |  | +		this.myFunction = this.myFunction.bind('this')
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	myFunction (event) {
 | 
	
		
			
				|  |  | +		this.nowAvailable('!!!')
 | 
	
		
			
				|  |  | +		event.preventDefault()
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	render () {
 | 
	
		
			
				|  |  | +		return (
 | 
	
		
			
				|  |  | +			<p onClick={this.myFunction.bind(this)}>test</p>
 | 
	
		
			
				|  |  | +			<p onClick={(e) => {this.myFunction(e)}}>test</p>
 | 
	
		
			
				|  |  | +			or
 | 
	
		
			
				|  |  | +			<p onClick={this.myFunction}>test</p> Needs constructor hack
 | 
	
		
			
				|  |  | +		)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +```
 |