目前,在 react 的數據狀態管理領域最有影響力有兩大流派:javascript
以redux爲例,從目前現狀來看,redux 單一數據源帶來了自然數據收集和管理的優點,但開發的時候,咱們煩擾於java
remux 是基於 redux 包裝,可插拔式狀態管理,漸進式式開發的多 store 實例的框架。react
它提供如下能力:git
export default {
namespace:"app",
state: {
count: 0
},
reducers: {
increment(state) {
return{
count: state.count+1
}
}
},
effects:{
async asyncIncrement(state, { dispatch }) {
function delay(timeout) {
return new Promise(resolve => setTimeout(resolve, timeout));
}
await delay(1000);
dispatch({
type: "increment"
});
}
}
}
複製代碼
import { Provider } from 'react-remux';
export default ()=>{
return <Provider model={model}><App/></Provider>
}
複製代碼
import {connect} from 'react-remux';
@connect(state=>state.app);
class App extends React.Component {
render() {
const { count ,dispatch } = this.props
// 常規寫法
const onClickHandler = ()=>dispatch({type:'app/increment'}})
// 簡寫
const onClickHandler = ()=>dispatch({type:'increment'}})
// 直接不寫type
const onClickHandler = ()=>dispatch({count:count+1}})
return <div> <button onClick={onClickHandler}>add</button> <span>{count}</span> </div>
}
}
複製代碼
import {
useSelector,
useDispatch,
shallowEqual
} from 'react-remux';
const App = ()=>{
const dispatch = useDispatch()
const state = useSelector((store: any) =>store.app, shallowEqual);
// 常規寫法
const onClickHandler = ()=>dispatch({type:'app/increment'}})
// 簡寫
const onClickHandler = ()=>dispatch({type:'increment'}})
// 直接不寫type
const onClickHandler = ()=>dispatch({count:state.count+1}})
return <div> <button onClick={onClickHandler}>add</button> <span>{count}</span> </div>
}
複製代碼
想了解更多,請跳轉github
完整的示例請參考:
Todos App
Guide
remux-fractal編程
咱們對比一下 redux 數據流和 remux 數據流的區別:json
redux 數據流redux
remux 站在巨人的肩膀上借鑑了 redux 和 dva 的一些優秀設計理念,例如單向數據流狀態可追蹤,中間件機制,redux-saga的集成,內置的 loaidng、promise,而且針對使用 redux 中的一些痛點做了再設計,使其易上手、易調試、可擴展。promise
最後若是在使用過程當中遇到任何問題或者有功能建議歡迎經過 issue 反饋給咱們,很是感謝。數據結構