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 };
		},
	},
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值