React 新框架:Mirror
Mirror 是一款基於 React、Redux 和 react-router 的前端框架,簡潔高效、靈活可靠。 |
我們熱愛 React 和 Redux。但是,Redux 中有太多的樣板檔案,需要很多的重複勞動,這一點令人沮喪;更別提在實際的 React 應用中,還要整合 react-router 的路由了。
一個典型的 React/Redux 應用看起來像下面這樣:
actions.js export const ADD_TODO = 'todos/add'export const COMPLETE_TODO = 'todos/complete'export function addTodo(text) { return { type: ADD_TODO, text } }export function completeTodo(id) { return { type: COMPLETE_TODO, id } }
reducers.js import { ADD_TODO, COMPLETE_TODO } from './actions'let nextId = 0export default function todos(state = [], action) { switch (action.type) { case ADD_TODO: return [...state, {text: action.text, id: nextId++}] case COMPLETE_TODO: return state.map(todo => { if (todo.id === action.id) todo.completed = true return todo }) default: return state } }
Todos.js import { addTodo, completeTodo } from './actions'// ...// 在某個事件處理函式中dispatch(addTodo('a new todo'))// 在另一個事件處理函式中dispatch(completeTodo(42))
看起來是不是有點繁冗?這還是沒考慮 非同步 action 的情況呢。如果要處理非同步 action,還需要引入 middleware(比如 redux-thunk 或者 redux-saga),那麼程式碼就更繁瑣了。
Todos.js import mirror, { actions } from 'mirrorx'let nextId = 0mirror.model({ name: 'todos', initialState: [], reducers: { add(state, text) { return [...state, {text, id: nextId++}] }, complete(state, id) { return state.map(todo => { if (todo.id === id) todo.completed = true return todo }) } } })// ...// 在某個事件處理函式中actions.todos.add('a new todo')// 在另一個事件處理函式中actions.todos.complete(42)
是不是就簡單很多了?只需一個方法,即可定義所有的 action 和 reducer(以及 非同步 action)。
而且,這行程式碼:
actions.todos.add('a new todo')
完全等同於這行程式碼:
dispatch({ type: 'todos/add', text: 'a new todo'})
完全不用關心具體的 action type,不用寫大量的重複程式碼。簡潔,高效。
上述程式碼示例僅僅針對同步 action。
事實上,Mirror 對非同步 action 的處理,也同樣簡單:
mirror.model({ // 省略前述程式碼 effects: { async addAsync(data, getState) { const res = await Promise.resolve(data) // 呼叫 `actions` 上的方法 dispatch 一個同步 action actions.todos.add(res) } } })
沒錯,這樣就定義了一個非同步 action。上述程式碼的效果等同於如下程式碼:
actions.todos.addSync = (data, getState) => { return dispatch({ type: 'todos/addAsync', data }) }
呼叫 actions.todos.addSync 方法,則會 dispatch 一個 type 為 todos/addAsync 的 action。
你可能注意到了,處理這樣的 action,必須要藉助於 middleware。不過你完全不用擔心,使用 Mirror 無須引入額外的 middleware,你只管定義 action/reducer,然後簡單地呼叫一個函式就行了。
Mirror 完全按照 react-router 4.x 的介面和方式定義路由,因此沒有任何新的學習成本。
更方便的是,Mirror 的 Router 元件,其 history 物件以及跟 Redux store 的聯結是自動處理過的,所以你完全不用關心它們,只需關心你自己的各個路由即可。
而且,手動更新路由也非常簡單,呼叫 actions.routing 物件上的方法即可更新。
Mirror 的設計理念是,在儘可能地避免發明新的概念,並保持現有開發模式的前提下,減少重複勞動,提高開發效率。
Mirror 總共只提供了 4 個新的 API,其餘僅有的幾個也都是已存在於 React/Redux/react-router 的介面,只不過做了封裝和強化。
所以,Mirror 並沒有“顛覆” React/Redux 開發流,只是簡化了介面呼叫,省去了樣板程式碼:
在對路由的處理上,也是如此。
使用 create-react-app 建立一個新的 app:
$ npm i -g create-react-app $ create-react-app my-app
建立之後,從 npm 安裝 Mirror:
$ cd my-app $ npm i --save mirrorx $ npm start
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2658923/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- React狀態管理大亂鬥,橫向對比Dva,Rematch,MirrorReactREM
- 【react】React 18新特性React
- Ethereum Geth Mirror
- React 新特性React
- Mirror 的工作原理
- public-image-mirror
- ASM Fast Mirror ResyncASMAST
- react前端框架dva(四)React前端框架
- react前端框架dva(三)React前端框架
- React 新增常用通用框架React框架
- MinIO Mirror技術Watcher
- React測試框架之enzymeReact框架
- Vue、React、Angular最佳UI框架VueReactAngularUI框架
- 一次掌握 React 與 React Native 兩個框架React Native框架
- React的新引擎—React Fiber是什麼?React
- 【like-react】手寫一個類似 react 的框架React框架
- 基於react + redux的Bone框架ReactRedux框架
- 手寫簡易版React框架React框架
- React16 新特性React
- React Native 0.59 新特性React Native
- 如何搭建一個REACT全家桶框架React框架
- React Native框架探索學習筆記React Native框架筆記
- jest對react單元測試框架React框架
- Nginx的mirror指令能幹啥?Nginx
- React新的生命週期React
- React 16.4新特性發布React
- React Native新架構剖析React Native架構
- React.JS 18新特性ReactJS
- Facebook AI新框架「TensorMask」AI框架ORM
- 微服務前端開發框架React-Admin微服務前端框架React
- 基於Abp React前端的專案建立與執行——React框架分析React前端框架
- sqlserver關於mirror映象的總結SQLServer
- 松下電視智慧投影Mirror for Panasonic TV
- Oka Mirror for Any Device快速入門教程dev
- React 16 新特性全解(上)React
- React 16 新特性使用總結React
- [譯]React v16.9 新特性React
- 新的React狀態庫:focaReact