Denny Ku
Denny Ku
今天要講什麼
Outline
基本上
就是我的工作流程
前言
前言
MVC 是什麼
MVVM 是什麼
多了一個 View Model
MVVM 是什麼
所以
建置環境
$> npm install -g react-create-app
$> create-react-app hello-world
$> cd hello-world && npm install && npm start
React basic
f(Data, Template) = View
Recap
Thinking in React
關鍵的概念:hierarchy
恰巧 HTML 最大的優點就是
它是個 markup languate
它能夠很好的描述各種 hierarchy
Component base
Web Component
<FilterableProductTable>
<SearchBar />
<ProductTable>
<ProductCategoryRow/>
<ProductRow/>
</ProductTable>
</FilterableProductTable>
JSX
<FilterableProductTable>
<SearchBar />
<ProductTable>
<ProductCategoryRow/>
<ProductRow/>
</ProductTable>
</FilterableProductTable>
Hello world
// /static/js/bundle.js
import ReactDOM from 'react-dom';
ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('example')
);
<!doctype html>
<html lang="en">
<body>
<div id="example"></div>
</body>
<script type="text/javascript" src="/static/js/bundle.js"></script>
</html>
Hello world
// /static/js/bundle.js
import ReactDOM from 'react-dom';
import Hello from 'components/Hello';
ReactDOM.render(
<Hello />,
document.getElementById('example')
);
<!doctype html>
<html lang="en">
<body>
<div id="example"></div>
</body>
<script type="text/javascript" src="/static/js/bundle.js"></script>
</html>
const Hello = () => (
<h1>Hello, world!</h1>
);
export default Hello;
What is View
f (Data, Template) -> View
const Hello = () => (
<h1>Hello, world!</h1>
);
export default Hello;
const Hello = ({text}) => (
<h1>{text}</h1>
);
export default Hello;
f () -> View
React 中的 Props 跟 State
// CSS 待會再說
<Hello text={"yo"}/>
const Hello = ({text}) => (
<h1>{text}</h1>
);
export default Hello;
這就是 Props
那 State 呢
<div className="App">
<h1>Hello world</h1>
<input type="text" ref='input'/>
<button onClick={this.clickHandler}>
send
</button>
<TodoList todos={todos} />
</div>
clickHandler = (e) => {
const {
value,
} = this.refs.input
const {
todos,
} = this.state;
this.setState({
todos: todos.concat(value)
}, ()=> {
this.refs.input.value = '';
})
}
Live demo
State 的壞處
State
State
State
State
gan gan gan
Make State great again
State
User action
還可以更好
這樣做的結果是會得到一個過度複雜的 Component
React intermediate
Redux
Redux
Redux - Async?
送出後不會馬上做完的事情
Redux - 學習資源
redux-saga
處理 Side effect、Async action 的 Middle ware
redux-saga - saga 是什麼
redux-saga - saga 是什麼
redux-saga - 學習資源
react-router
Single Page Application 的 Router 問題
關鍵概念:
If route is nested , then component should be nested.
CSS Modules
CSS Modules
import cssModules from 'react-css-modules';
import styles from './styles.css';
/* eslint-disable global-require*/
const Loading = () => (
<div styleName="container">
<img
styleName="loading-icon"
src={require('../../../assets/components/loading-icon.png')} alt=""
/>
</div>
);
/* eslint-enable */
export default cssModules(Loading, styles);
@keyframes spin { 100% {transform: rotate(360deg); }}
.container {
position: relative;
padding: 30px;
text-align: center;
}
.loading-icon {
animation: spin 0.7s linear infinite;
}
CSS Modules
CSS Modules - 結論
結論
結論
你使用的語言被人嘲笑
職業被藐視
解決問題的努力被視為噱頭
自詡不弄髒手的人輕視你面對的問題
執行引擎到處是實作者從未重視過的 Bug
所有跨平台的承諾都在增加你要解決的問題
UX認為要的效果很簡單
QA給你的回報難對上問題
最後,報酬通常低於平均水準
你說,你想成為前端工程師
參考資料