给定此
export const slice = createSlice({
name: 'reducer',
initialState: {
},
reducers: {
test: (state, action) => {
console.log(action.payload) // 1
}
},
})
然后我运行这个
dispatch(test(1,2,3,4,5,6,7))
action.payload
只是第一个参数。我怎样才能得到另外6个?
阅读相关文档
默认情况下,生成的操作创建者接受单个参数,该参数变为
action.payload
。这需要调用方正确构建整个有效负载并将其传入
所以你可以用调用操作
dispatch(test([1,2,3,4,5,6,7]))
这样,有效负载现在将是您传递的数组。
但是,如果您需要能够用多个参数调用它,则可以使用prepare
回调
如果要将
meta
或error
属性添加到操作中,或自定义操作的payload
,则必须使用prepare
表示法。
export const slice = createSlice({
name: 'reducer',
initialState: {
},
reducers: {
test: {
reducer(state, action){
console.log(action.payload) // 1
},
prepare(...arguments){
return {
payload: arguments;
}
}
}
},
});
这样,您原来调用操作的方式将再次产生一个数组的有效负载,该数组将包含您传递的所有参数,而不管它们的编号如何。
是的,我们可以在redux reducer中发送多个参数,但在封装在单个对象中之后。单个对象参数可以是数组或JSON对象。
// as an array
dispatch(test(["first","second","third"]));
// as a JSON object
dispatch(test({ first:1, second:2, third:3 }));
你的结果会是这样的。
export const slice = createSlice({
name: 'reducer',
initialState: {
},
reducers: {
test: (state, action) => {
console.log(action.payload) // ["first","second","third"]
// or in case of JSON object
console.log(action.payload) // { first:1, second:2, third:3 }
}
},
})