Maison  >  Article  >  interface Web  >  Explication du noyau Redux (exemple de code)

Explication du noyau Redux (exemple de code)

不言
不言avant
2018-12-11 09:49:202024parcourir

Ce que cet article vous apporte, c'est l'explication principale (exemple de code) de redux. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Concept

Redux est un modèle architectural qui peut être utilisé en conjonction avec React et Vue.

Problèmes résolus

Modifier élégamment l'état des données partagées pour éviter les changements d'état en chaîne dans les composants parent-enfant (il sera difficile de changer s'il y a de nombreux composants enfants ) et modifications externes Il existe des problèmes inutiles (difficiles à éliminer), donc toutes les modifications doivent être effectuées via une seule méthode (répartition).

Explication du noyau Redux (exemple de code)

Étapes de mise en œuvre

//state(数据)和action(控制修改)后的数据
function reducer (state, action) {
    /!* 初始化 state 和 switch case *!/
}

// 通过reducer获取state
// 执行action
// 监听数据变化
const store = createStore(reducer)

// 监听数据变化重新渲染页面
// 通过观察者模式监听数据变化,避免没有状态改变的频繁渲染
store.subscribe(() => renderApp(store.getState()))

// 首次渲染页面
renderApp(store.getState())

Exemple

const usersReducer = (state, action) => {
    if (!state) return [];
    switch (action.type) {
        case "ADD_USER":
            return [...state, action.user]
        case "DELETE_USER":
            return [...state.slice(0, action.index), ...state.slice(action.index + 1)]
        case "UPDATE_USER":
            let user = {
                ...state[action.index],
                ...action.user,
            }
            return [
                ...state.slice(0, action.index),
                user,
                ...state.slice(action.index + 1),
            ]
        default:
            return state
    }
}
//state(数据)和dispatch(控制修改)封装起来
function createStore (reducer) {
    let state = null
    const listeners = []
    const subscribe = (listener) => listeners.push(listener)
    const getState = () => state
    const dispatch = (action) => {
        state = reducer(state, action) // 覆盖原对象
        // console.log(listeners)
        listeners.forEach((listener) => {
            // console.log(listener)
            listener()

        })
    }
    dispatch({}) // 初始化 state
    return { getState, dispatch, subscribe }
}
const store = createStore(usersReducer);
console.log(store.getState());
//增
store.dispatch({
    type: 'ADD_USER',
    user: {
        username: 'Lucy',
        age: 12,
        gender: 'female'
    }
});
console.log(store.getState());
//改
store.dispatch({
    type: 'UPDATE_USER',
    index: 0,
    user: {
        username: 'Tomy',
        age: 12,
        gender: 'male'
    }
});
console.log(store.getState());
//删
store.dispatch({
    type: 'DELETE_USER',
    index: 0 // 删除特定下标用户
});
console.log(store.getState());

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer