代碼如下:
computed: {
columns: function () {
let columns = [];
switch (this.tab) {
case "1":
return [
{
label: "name",
prop: "name",
width: 260,
},
{
label: "gender",
prop: "gender",
formatter: (row, column, cellValue, index) => {
const value =
cellValue &&
["男", "女"][cellValue];
const stateClass = [
"status_error",
"status_success",
][cellValue];
return (
<span class={status_success}>{value}</span>
);
},
},
];
break;
default:
columns = [
{
label: "company",
prop: "company",
width: 260,
},
{
label: "status ",
prop: "status",
formatter: (row, column, cellValue, index) => {
const value =
cellValue &&
["經(jīng)營(yíng)中", "已關(guān)閉"][cellValue];
const stateClass = [
"status_success",
"status_warning"
][cellValue];
return <span class={stateClass}>{value}</span>;
},
},
];
break;
}
return columns;
},
},
h
未定義帕棉?h
是啥?其實(shí)就是createElement
函數(shù)的別名误甚,具體可以看這里:vue中render: h => h(App)的理解蚯根。
另外一個(gè)頁(yè)面columns formatter
也是這么寫的驹止,沒(méi)問(wèn)題呀。
等下凶赁,不能createElement
咧栗?是不是this
沒(méi)有綁定上?果然虱肄,在<span>
標(biāo)簽的時(shí)候就報(bào)錯(cuò)了楼熄。
對(duì)比了另一個(gè)正確展示的頁(yè)面,發(fā)現(xiàn)columns
是寫在data
里的浩峡,而這組件columns
需要根據(jù)props
動(dòng)態(tài)生成可岂,就寫在computed
里面了。難道是這個(gè)影響了翰灾?提到data
里試一下吧缕粹。
一試真的嚇一跳稚茅,oooooook了,頁(yè)面展示正確了F秸丁Q窍怼!;婷妗欺税!
后來(lái)終于找到了原因:data
是成員函數(shù),所以會(huì)把h
注入揭璃,而像methods,computed
這些都只是對(duì)象晚凿,不會(huì)注入h
。具體解釋見(jiàn):ReferenceError: h is not defined瘦馍。
但是,如果vue
用的是3.4以上的版本(本項(xiàng)目中用的是2.6.12)歼秽,我一開(kāi)始的寫法就沒(méi)問(wèn)題,因?yàn)?code>method and getter 已經(jīng)自動(dòng)注入h
了情组。詳情見(jiàn) h-auto-injection燥筷。