- 在組件之間重用 stateful logic & side effect 是困難的
- Design pattern in React:
	
		- Mixins
- HOC (higher order component)
- Hooks
 
 
	- 將其中定義的 state、method、lifecycle 直接混進組件中
- mixin 是 object,組件也是 object,將前者直接混入後者
- 缺點:
	
		- 命名衝突問題
- 嚴重的隱性依賴、耦合問題
- 鑽石繼承問題
 
 
	- Decorator Pattern
	
		- 將重用的邏輯與 side effect 封裝在一個組件內,然後讓這個邏輯用組件包住目標的組件,將狀態屬性與方法傳入
 
- 缺點:
	
		- Wrapper hell:可讀性低下 & 效能浪費
- 依然沒有完全解決命名衝突
- 狀態與邏輯的傳遞依然不是透明的
- 屬性挾持有破壞其他層級組件的潛在風險
 
 
	- 全面改用函數式來抽象化重用的狀態與邏輯
- hook 本身就是函數,組件也是函數,在後者裡面調用前者
- 
函數式方案的優點:
	
		- 
徹底解決命名衝突問題
		
			- 函數之間能區隔命名作用域
- 狀態與方法不是直接混進組件而是調用函數,因此也能於賦值時重命名
 
- 
副作用可以清楚明瞭的被調用與清理
		
			- 副作用邏輯可以獨立被封裝,不需依賴於組件中的生命週期定義
 
- 
依賴與耦合透明
		
			- 函數式調用能讓狀態、方法與副作用之間的資料傳遞完全透明,並清楚地被控制和再封裝
 
 
  
		 
		    Made with Slides.com