vuex与redux的使用

Vuex的使用

state:存储数据
mutations:修改state数据的同步方法
actions:异步方法,请求之类的
modules:挂载别的仓库
Vue实例中使用this.$store.XX来使用数据,调用action中的方法需要

this.$store.dispatch('方法名',{参数为对象,没有的话可以省略})

进行分发,需要调用mutations中的方法需要

this.$store.commit('方法名',{参数为对象,没有的话可以省略})

进行提交
Vuex也有辅助函数

import { mapState, mapMutations,mapActions } from 'vuex'

然后state的数据可以在计算属性中获取,然后直接this.数据进行使用

 computed: {
    ...mapState(['数据'])
    }

方法在methods中展开获取

 ...mapMutations(['方法名'])

~~

redux的使用

~~
1.新建一个store,类似管理员

import { createStore,applyMiddleware,compose  } from 'redux';
import reducer from './reducers'
const store=createStore( reducer,);
export default store;

2.新建一个数据仓库reducers.js,抛出的是一个纯函数,并在store中引入

import { CHANGE_INPUT_VALUE} from './actionTypes';
const defaultState = {}
export default (state = defaultState, action) => {
    const newState = JSON.parse(JSON.stringify(state))
    if (action.type === CHANGE_INPUT_VALUE) {
        newState.inputValue = action.value
        return newState
    }
    return state;
}

3.在入口函数中引入

import { Provider} from 'react-redux'
import store from './store'

并在根组件上使用Provider ,使包裹的组件都可以使用store的数据

const App= (
  <Provider store={store}>
  <TodoList />
    </Provider>
)

4.给需要用到store数据的组件进行连接store,引入

import {connect} from 'react-redux'

并且在抛出的时候改为连接的方式,mapStateToProps为获取的store中的数据,mapDispatchToProps修改store中的数据的方法

export default connect(mapStateToProps,mapDispatchToProps)(TodoList);

例如:实现实时修改input中的数据
(1)绑定数据,并绑定onChange方法

  <Input
                placeholder="我是输入框"
                value={props.inputValue}
                onChange={props.handleChange}
            />

并在mapStateToProps中获取

const mapStateToProps=(state)=>{
    return {
        inputValue:state.inputValue,
    }
}

2.onChange的方法写在mapDispatchToProps中,需要创建一个action来告诉store将要进行什么操作,步骤如下:

2.1.新建一个actionTypes.js用来声明action的类型,之所以专门用一个js文件来声明,是防止因为常量的拼写错误而导致的找不到错误,具体要声明多少个,根据自己的需求来决定

export const CHANGE_INPUT_VALUE='CHANGE_INPUT_VALUE';

2.2.新建一个actionCreator.js用来专门存放action.方便管理,action只能返回一个对象,如果有引入redux-thunk就可以返回一个函数,一般用户发送ajax请求

import { CHANGE_INPUT_VALUE } from './actionTypes';
export const getInputValueChangeAction = (value) => ({
    type: CHANGE_INPUT_VALUE,
    value
})

2.3这样就是实现了利用rudex完成数据更新

const mapDispatchToProps=(dispatch)=>{
    return {
        handleChange(e){
            const action = getInputValueChangeAction(e.target.value)
            dispatch(action)
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值