美文网首页
Redux初级

Redux初级

作者: AnnaJIAN | 来源:发表于2020-04-03 19:04 被阅读0次

    安装antd

    npm install antd --save
    

    安装redux

    npm install --save redux
    

    使用redux进行统一的数据源管理
    component -> action -> store -> reducer
    reducer 存储数据,返回给store,action从store获取数据

    //####TodoList.js
    import store from './store/index'
    ...
        constructor(props){
            super(props)
            this.state = store.getState()
        }
    ...
    //调用的地方
     dataSource={this.state.list}
    ...
    //####store/index.js
    import reducer from './reducer'
    const store = createStore(reducer)
    export default store
    //####reducer.js
    const defaultState = {
        inputValue : 'xxxxoooo'
    }
    export default (state = defaultState, action) => {
        return state
    }
    

    Chrome 工具

    //####Redux Dev Tools
    const store = createStore(
        reducer,
        window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
    ) // 创建数据存储仓库
    

    修改数据
    构造函数订阅(subscribe)数据变化,每个动作触发(dispatch)store变化,reducer 返回newState,不能直接修改state

    //####TodoList.js
    constructor(props) {
        super(props)
        this.state = store.getState()
        this.clickBtn = this.clickBtn.bind(this)
    
        this.storeChange = this.storeChange.bind(this)
        store.subscribe(this.storeChange)
    }
    ...
    storeChange() {
        this.setState(store.getState())
    }
    ...
    clickBtn() {
        const action = {
            type: 'addItem'
        }
        store.dispatch(action)
    }
    //####reducer.js
    const defaultState = {
        inputValue : 'input a value',
        list: []
    }
    export default (state = defaultState, action) => {
        if (action.type === 'addItem') {
            let newState = JSON.parse(JSON.stringify(state))
            newState.list.push(newState.inputValue)
            newState.inputValue = ''
            return newState
        }
        return state
    }
    

    整理actionType,写到一个文件里面,统一管理, reducer 和 ToDoList 需要统一

    export const  CHANGE_INPUT = 'changeInput'
    export const  ADD_ITEM = 'addItem'
    export const  DELETE_ITEM = 'deleteItem'
    

    把action 抽象出来放在一个统一的文件中管理

    //####TodoList.js
    import { changeInputAction, addItemAction, deleteItemAction} from './store/actionCreators'
    ...
    changeInputValue(e) {
        const action = changeInputAction(e.target.value)
        store.dispatch(action)
    }
    //####actionCreators.js
    import {CHANGE_INPUT, ADD_ITEM, DELETE_ITEM}  from './actionTypes'
    export const changeInputAction = (value) => ({
        type : CHANGE_INPUT,
        value
    })
    

    相关文章

      网友评论

          本文标题:Redux初级

          本文链接:https://www.haomeiwen.com/subject/kcnxphtx.html