目前,在 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 反馈给咱们,很是感谢。数据结构