DvaJS的Reducer介绍与使用

在开发DvaJS构建的项目时,有五个要素是一定要掌握的。

  1. namespace - - 命名空间
  2. state - - 数据状态
  3. reducer - - 修改状态
  4. effect
  5. subscripition

Reducer:

reducer是一个函数,接收state 和 action,返回老的或新的state。即: (state, action) => state

增删改:

以todos为例:

app.model({
	namespace: 'todos,
	state: [],
	reducers: {
		add(state, { payload: todo }) {
			return state.concat(todo);
		},
		remove(state, { payload: id }) {
			state.filter(todo => todo.id !== id);
		},
		update(state, { payload: updatedTodo }) {
			return state.map(todo => {
				if (todo.id === updatedTodo.id) {
					return { ...todo, updatedTodo };
				} else {
					return todo;
				}
			});
		},
	},
})
嵌套数据的增删改

建议最多一层嵌套,以保持state的扁平化,深层嵌套会让reducer很难写和难以维护。

app.model({
	namespace: 'app',
	state: {
		todos: [],
		loading: false,
	},
	reducers: {
		add(state, { payload: todo }) {
			const todos = state.todos.concat(todo);
			return { ...state, todos };
		},
	},
});

下面是深层嵌套的例子,应尽量避免。

app.model({
	namespace: 'app',
	state: {
		a: {
			b: {
				todos: [],
				loading: false,
			},
		},
	},
	reducers: {
		add(state, { payload: tod }) {
			const todos = state.a.b.todos.concat(todo);
			const b = { ...state.a.b, todos };
			const a = { ...state.a, b};
			return { ...state, a };
		},
	},
});
上一篇:DvaJS的Effect使用介绍


下一篇:Laravel Passport身份认证写法