javascript - 在使用 TypeScript 的 Vuex 突变中,对象可能是“未定义”
问题描述
我正在使用 Vuex 和 TypeScript 学习 Vue.js,在我正在构建的应用程序中,我在 Vuex 商店中遇到了错误“对象可能是'未定义'”。
错误发生在这一行的“newCard”突变中:
state.board.lists.find(list => list.id === idList).cards.unshift(card)
完整的商店代码:
const state: BoardState = {
board: {
id: "",
name: "",
idProject: "",
closed: false,
lists: []
}
};
const getters: GetterTree<BoardState, {}> = {
getBoard: state => state.board
};
const mutations: MutationTree<BoardState> = {
setBoard: (state, board) => (state.board = board),
newList: (state, list) => state.board.lists.unshift(list),
newCard: (state, { card, idList }) =>
state.board.lists.find(list => list.id === idList).cards.unshift(card)
};
const actions: ActionTree<BoardState, {}> = {
async fetchBoard({ commit }) {
const response = await axios.post("https://app.fakejson.com/q", json);
commit("setBoard", response.data);
},
async addList({ commit }, list) {
const response = await axios.post("https://app.fakejson.com/q", {
token: "oplF0L7vj1Ial4cRqtx9DA",
data: list
});
commit("newList", response.data);
},
async addCard({ commit }, { card, idList }) {
const response = await axios.post("https://app.fakejson.com/q", {
token: "oplF0L7vj1Ial4cRqtx9DA",
data: card
});
commit("newCard", response.data, idList);
}
};
打字稿类型:
// Store
export interface BoardState {
board: Board;
}
// Models
export interface Board {
id: String;
name: String;
idProject: String;
closed: Boolean;
lists: List[];
}
export interface List {
id: String;
name: String;
idBoard: String;
closed: Boolean;
cards: Card[];
}
export interface Card {
id: String;
name: String;
idList: String;
closed: Boolean;
}
板子状态的响应数据是这样的:
{
"id":"1",
"name":"Tasks",
"idProject":"1",
"closed":false,
"lists":[
{
"id":"1",
"name":"To Do",
"idBoard":"1",
"closed":false,
"cards":[
{
"id":"1",
"idList":"1",
"name":"Card 1",
"closed":false
},
{
"id":"2",
"idList":"1",
"name":"Card 2",
"closed":false
}
]
}
]
}
解决方案
state.board.lists.find(list => list.id === idList).cards.unshift(card)
可能找不到具体的名单。所以你将无法从中挑选卡片。
const list = state.board.lists.find(list => list.id === idList)
if (!list) {
// do something
return
}
// list found so return
return list.cards.unshift(card)
推荐阅读
- c++ - 当键不唯一时解析键、值对
- oracle - 如何解决 Entity Framework 中的 Oracle DBLinks 限制?
- regex - API 测试正文中的正则表达式
- kubernetes - Spring Cloud Dataflow errorChannel 不起作用
- java - 我想使用jsoup(java开源库)解析html数据
- php - 当用户在 codeignitor http://localhost/abc/categories/sub_categories/add_sub_categories 中提交表单时,我想调用一个函数
- php - 在php foreach循环中获取数组中的下一个键
- javascript - 返回内部 if else 并使用粗箭头
- gridview - DevExpress GridView VisibleRowCount
- java - 文件位置显示 eclipse 安装目录而不是 eclipse 工作区