我正在尝试编写一个应用程序,用户可以在该应用程序中添加项目。用户键入collection-item的名称,并出现具有此名称的项目。
但是当我发出行动addCollection
时:
export function addCollection(text) {
console.log("ACTION ADD COLLECTION FIRED");
return {
type: "ADD_COLLECTION",
text
}
}
到我的减速机:
export default function collection(state = [], action) {
switch(action.type) {
case "ADD_COLLECTION":
return (
Object.assign({}, state, {
collections: [
{
name: action.text,
src:''
},
...state.collections
]
})
);
}
return state
}
发生错误:
TypeError: Cannot convert undefined or null to object
我的减速机中的第6行。我认为reducer不知道我的state.collection
var initialState = {
collections:[
{
name:"Aenean in justo ante",
src: ''
},
{
name:"Aenean in justo ante",
src: ''
}
],
formIsRender: false
}
const store = createStore(allReducers, initialState)
错误在哪里?
答案 0 :(得分:3)
您的初始状态为array
而不是object
您不能也不应该在数组上使用Object.assign
你可以使用spread operator来改变数组。
请改为尝试:
case "ADD_COLLECTION":
return [...state, {name: action.text}]
我注意到的另一件事是,在您的初始状态对象中,您将其命名为collections
(复数),而缩减器的名称为collection
(单数)。
确保它不是拼写错误。