网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

React-Redux与MVC风格

前言

  刚接触React的时候,有人感叹这不就是当年的JSP吗?直接用代码生成html,两者混在一起,还真有不少人喜欢把事件响应和业务逻辑都写在component里面,看起来就头疼。当年的JSP已经被MVC所终结,我们可以借鉴MVC的思想让React-Redux的代码好写又好看。

创新互联公司专注于武陵网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供武陵营销型网站建设,武陵网站制作、武陵网页设计、武陵网站官网定制、微信小程序开发服务,打造武陵网络公司原创品牌,更为您提供武陵网站排名全网营销落地服务。

先回顾一下MVC思想,如下图:

React-Redux与MVC风格

  用户的请求先由Controller进行处理,处理后的数据放入Model,View根据Model的数据渲染界面呈现在用户面前。

React-Redux中应用MVC

1. Model 对应Redux store
  Redux store由几个数据模块组成,每个模块中的数据在一组页面或者一个业务流程中使用。
redux/rootReducer.js

import {reducer as common} from './commonAction'
import {reducer as online} from './onlineAction'

export default combineReducers({
    common,
    online,
})

2. View 对应React component
  Component将数据呈现出来,要尽可能地只做页面显示,其它代码一概抽离,例如:
login/index.js

import {actions} from './action';

class Login extends Component {
  componentWillMount() {
    this.props.clearSession();
  }
render() {
    const p = this.props;
    return (
       
p.updateFormValue({username: e.target.value})} >
p.updateFormValue({password: e.target.value})} >
) } } export default connect( store => ({ s: store.online }), { ...actions } )(Login);

3. Controller 对应action,reducer
  store中的每个模块都有自己的reducer负责更新数据
redux/onlineAction.js

const types = {
    UPDATE_VALUE: 'ONLINE/UPDATE_VALUE',
}
export const actions = {
    updateValue: values => (dispatch, getStore) => {
        dispatch({type: types.UPDATE_VALUE, ...values});
    },
}
const initStore = {
  username: '',
password: '',
}
export const reducer = (store={...initStore}, action) => {
    switch (action.type) {
        case types.UPDATE_VALUE:
            return {...store, ...action};
        default:
            return {...store};
    }
}

  把负责更新数据的action type,action,reducer合并成一个文件。有些教程说,每个变量都要一个特定的action type,action creator和reducer中的case。在我看来是没有意义的,一个数据更新action就够模块里面所有变量使用了,而且可以一次更新多个变量,在接收后台数据时提高效率。

  每个页面都有在自己的action,处理自己的事件响应和业务逻辑。当需要时就调用模块级别的action来更新数据。

login/action.js

import {actions as onlineActions} from '../redux/onlineAction';

export const actions = {
  updateFormValue: value => (dispatch, getStore) => {
      dispatch(onlineActions.updateValue(value));
      dispatch(actions.verifyValue());
  },
  verifyValue: () => (dispatch, getStore) => {
      const {username, password} = getStore().online;
      let loginReady = username.length >= 6;
      loginReady = loginReady && password.length >= 6;
      dispatch(onlineActions.updateValue(loginReady));
},
submitLogin: () => (dispatch, getStore) => {
    const {username, password} = getStore().online;
      // submit data to server ...
}

}


  这里讨论了一种React-Redux项目的参考编码风格,让代码看起来有MVC感觉,好写好看。

  另外,thunk只是入门级的中间件,对自己有要求的同学应该去学习一下saga。


文章名称:React-Redux与MVC风格
分享链接:http://bjjierui.cn/article/iighcs.html

其他资讯