React条件渲染报错:intermediate value不是函数问题求助
问题分析与解决方法
原代码错误原因
你写的多个三元表达式直接并列(无逻辑连接符),JavaScript会将前一个表达式的结果当作函数去调用后一个表达式。比如:
(livematchcard.event.status_id == 134 ? livematchcard.periods[0] : null) (livematchcard.event.status_id == 65 ? livematchcard.periods[1] : null)
会被解析为:若第一个条件成立,就把livematchcard.periods[0]作为函数去调用第二个表达式的结果,这直接触发了Uncaught TypeError: (intermediate value) is not a function错误。
修改后错误的可能原因
改用&&后报错,要么是多个&&表达式依然直接并列(同样会被解析为函数调用),要么是livematchcard.periods[0]是对象或其他非React可直接渲染的类型。
正确实现方式
方式1:用||连接多条件(同一时间仅匹配一个status_id)
因为status_id同一时刻只会是一个值,用||取第一个符合条件的period项即可:
{ livematchcard.event.status_name !== "Ολοκληρώθηκε" ? "Τελικό" : livematchcard.event.sport_id === 4 ? ( (livematchcard.event.status_id === 134 ? livematchcard.periods[0] : null) || (livematchcard.event.status_id === 65 ? livematchcard.periods[1] : null) || (livematchcard.event.status_id === 135 ? livematchcard.periods[2] : null) || (livematchcard.event.status_id === 136 ? livematchcard.periods[3] : null) || (livematchcard.event.status_id === 137 ? livematchcard.periods[4] : null) ) : livematchcard.event.clock_time }
如果livematchcard.periods[n]是对象,需要提取可渲染属性,比如假设period包含displayText字段:
(livematchcard.event.status_id === 134 ? livematchcard.periods[0].displayText : null)
方式2:用对象映射简化逻辑(推荐)
把status_id和对应period索引做成映射表,代码更易维护:
// 抽成单独函数 const getMatchPeriod = (event, periods) => { const statusPeriodMap = { 134: 0, 65: 1, 135: 2, 136: 3, 137: 4 }; const periodIndex = statusPeriodMap[event.status_id]; return periodIndex !== undefined ? periods[periodIndex] : null; }; // JSX中使用 { livematchcard.event.status_name !== "Ολοκληρώθηκε" ? "Τελικό" : livematchcard.event.sport_id === 4 ? getMatchPeriod(livematchcard.event, livematchcard.periods) : livematchcard.event.clock_time }
额外注意事项
- 确保
livematchcard.periods[n]是React可渲染内容(字符串、数字、React元素等),对象必须提取具体属性。 - 建议用
===严格相等代替==,避免隐式类型转换导致的意外问题。
内容的提问来源于stack exchange,提问作者agrotis2231
相关产品推荐
相关产品推荐

