我正在使用React构建一个餐馆违规应用程序,我正在尝试返回结果,其中搜索的术语是数据集的子字符串。但是,我收到一条错误消息说
ViolationsRequest.jsx:49未捕获的TypeError:无法读取null的属性'indexOf'。
根据我的测试,看起来像door.restaurant被控制台记录为未定义。奇怪的是,这段代码完全匹配,即,如果你将if块切换为:
if (this.props.restaurant == door.restaurant) {
这是我的代码块。
const violationElements = this.state.doors.map((door, idx) => {
if (door.restaurant.indexOf(this.props.restaurant) !== -1) {
console.log();
return (
<ViolationsView key={idx}
restaurant={door.restaurant}
building={door.building}
street={door.street}
zip={door.zip}
phone={door.phone}
cuisine={door.cuisine}
inspectionDate={door.inspectionDate}
action={door.action}
violationCode={door.violationCode}
violationDescription={door.violationDescription}
criticalFlag={door.criticalFlag}
score={door.score}
grade={door.grade}
gradeDate={door.gradeDate}
inspectionType={door.inspectionType}
/>
)
}
});
这是我的state.doors数组:
const cleanData = restaurantData.data.map((inspectionData) => {
const [sid, id, position, createdAt, createdMeta,
updatedAt, updatedMeta, meta, camis, dba, boro,
building, street, zipcode, phone, cuisine,
inspectionDate, action, violationCode,
violationDescription, criticalFlag, score, grade,
gradeDate, recordDate, inspectionType] = inspectionData;
return {
sid: sid,
restaurant: dba,
building: building,
street: street,
zip: zipcode,
phone: phone,
cuisine: cuisine,
inspectionDate: inspectionDate,
action: action,
violationCode: violationCode,
violationDescription: violationDescription,
criticalFlag: criticalFlag,
score: score,
grade: grade,
gradeDate: gradeDate,
inspectionType: inspectionType,
};
});
答案 0 :(得分:0)
我认为问题是你没有使用===运算符,所以使用==你只验证值而不是类型。 例如:
var foo = null;
var bar = '';
var baz = 0;
var off = {};
console.log(bar == baz); // true
console.log(bar === baz); // false
console.log(foo == off.bar); // true
console.log(foo === off.bar); // false
所以可能this.props.restaurant == door.restaurant
是真的
但是this.props.restaurant === door.restaurant
是假的
答案 1 :(得分:0)
你的一个door.restaurant是null,这是错误信息所说的。空的,不是未定义的。如果它未定义,则错误消息会这样说。当您在此值上调用doors.restaurant.indexOf时,它会返回错误。
当我输入此内容时,您似乎已经弄明白了。