老東家 Vue,加實習寫了兩年半~,期間只是簡單學過 React,沒怎麼寫過。新東家用 React + Typescript,用了一個半月,寫了寫Demo 在線預覽。javascript
這裏簡單總結下和vue的區別,若是你也是在Vue轉React階段,歡迎加V交流掃碼加Vcss
有不一樣看法,歡迎評論區指教🤓html
通常 H5 的,或者一些作不大的系統,首選 Vue。由於 Vue 簡單,開發效率比較高。同時 Vue 包的體積也更小,在移動端網絡差別大的狀況下,資源體積是很是重要的。vue
像一些後臺系統,會越作越大的,就用 React。解決方案更多,後期也更方便迭代與維護。(本人有幸開發過 Vue 大項目,webpack 熱更新一下 3mins+)java
Vue 早期定位是儘量的下降前端開發的門檻
(這跟 Vue 做者是獨立開發者也有關係)。因此 Vue 推崇
靈活易用(漸進式開發體驗),數據可變,雙向數據綁定(依賴收集)。react
React 早期口號是 Rethinking Best Practices
(從新思考最佳實踐)。背靠大公司 Facebook 的 React,從開始起就不缺關注和用戶,並且 React 想要作的是用更好的方式去顛覆前端開發方式(事實上跟早期 jquery 稱霸前端,的確是顛覆了)。因此 React 推崇
函數式編程(純組件),數據不可變以及單向數據流。函數式編程最大的好處是其穩定性(無反作用)和可測試性(輸入相同,輸出必定相同),因此一般你們說的 React 適合大型應用,根本緣由仍是在於其函數式編程。jquery
因爲二者核心思想的不一樣,因此致使 Vue 和 React 許多外在表現不一樣(從開發層面看)。webpack
大神繪圖 React 生命週期 點擊生命週期便可跳轉官網解讀
生命週期這塊基本都是圍繞着掛載、更新、卸載
三個方面
created/mounted/destroyed
componentDidMount/componentDidUpdate/componentWillUnmount
,Hooks 更是沒有雙向綁定,單向數據流:vue2.x 經過 v-model
實現雙向綁定,能夠不關心受控組件,v-model 至關於 onChange 的語法糖
<input v-model="value" />
複製代碼
單向數據流:萬物皆 Props
,主要經過 onChange/setState()
的形式該更新數據,須要因此在 react 中須要關注受控組件的寫法
// 會報錯,props的值不可修改
<input value={this.props.value}/>
// 在onChange調用setState修改數據,須要調用setState修改綁定數據
<input value={this.state.value} onChange={this.onChange}/>
複製代碼
// 父組件
<template>
<div class="father"> 父組件 <Child :text="text"></Child> </div>
</template>
<script> import Child from './Child' export default { name: 'Father', components: { Child }, data() { return { text: '接收到了父組件數據' } } } </script>
// 子組件
<template> <div class="child"> <p>{{ text }}</p> <p>{{ children }}</p> </div> </template>
<script> export default { name: 'child', props: ['text'], data() { return { children: '子組件本身的數據' } } } </script>
複製代碼
import React, { useState, useEffect } from "react";
function Child({ onClick }) {
const [list, setList] = useState<number[]>([]);
useEffect(() => {
setList([1, 2, 3]);
}, [onClick]);
return (
<div> {list.map((item, index) => { return <div key={index}>{item}</div>; })} </div>
);
}
function Father() {
const show = () => {
return [4, 5, 6];
};
return (
<div> <Child onClick={show}></Child> </div>
);
}
export default Father;
複製代碼
props.function
)// index.vue
<template>
<Test> <div>插槽文本</div> </Test>
</template>;
import Test from "./test";
// test.vue
<template> <div> <slot></slot> </div> </template>;
複製代碼
// 父組件
import Test from "./test";
<Test> <div> 組件嵌套 </div> </Test>;
// 子組件
import * as React from "react";
const Test: React.FC<any> = (props) => {
return (
<> <div>測試props.children</div> <div>{props.children}</div> </>
);
};
export default Test;
複製代碼
更簡單,更方便
,熟悉了 api 之後,實現某些簡單功能更快。react 寫法更偏向於原生 JS
,Class 的寫法不是很舒服,我的更喜歡 hooks
。hooks
之後,寫起來很自由,不用關心 vue 中固定的 options api
react + typescript
更加溫馨,二者寫起來風格差距較大。onClick、style、className
等等,沒有 v-if,v-for,All in JS
。Vue 則推崇 html、js、css 分離
的寫法,固然 vue 也能夠寫 JSX子組件 props 字段裏聲明
。React 的 prop 不強制聲明,直接使用,若是用 TS 的話仍是要聲明的有成本的
,可是也沒有很難,最主要的仍是要多動手,不懂就深挖爲何快速過一遍
,畢竟都不是小白了。而後本身搞個項目,去實現一些本身感興趣的東西
查缺補漏
,找各類博文讀一讀,不理解的再次
進行學習總結
本身的學習成果,react已經學了一段時間了,後面再整理一下,發出來start