【问题标题】:IF-ELSE CONDITION NOT WORKING IN JSX REACTIF-ELSE 条件在 JSX 反应中不起作用
【发布时间】:2020-12-05 19:41:45
【问题描述】:

我试图以愚蠢的方式在 JSX 中执行 if 条件

{
                        ((selectedWebsite != null) && (selectedWebsite.desktop_prompt != null) &&
                            (typeof selectedWebsite.desktop_prompt !== "undefined")) ?
                        <FormControlLabel style={{"margin-left": "auto"}}
                                          control={<Switch size="small"
                                                           checked={selectedWebsite.desktop_prompt.enabled}
                                                           onChange={handleCheckDesktop}/>}
                        /> :
                        null
                    }

现在 selectedWebsite 是 {} 并且 desktop_prompt 未定义,但仍在执行 if 条件,我收到错误 TypeError: Cannot read property 'enabled' of undefined。我在这里做错了什么?

【问题讨论】:

  • 检查未定义不应在字符串中。所以代替 desktop_prompt !== "undefined" 检查 desktop_prompt !== undefined。
  • 试过了,还是一样的错误
  • 您提供的条件以及建议的解决方案应该有效。一定有其他问题,或者您可能正在代码中的其他地方访问 .enabled。

标签: reactjs react-native jsx


【解决方案1】:

由于 selectedWebsite 是 empty object,因此您可以检查键长度而不是检查空对象是 undefinednull

{Object.keys(selectedWebsite).length !== 0 ? 
  <FormControlLabel
    style={{"margin-left": "auto"}}
    control={<Switch size="small"
                 checked={selectedWebsite.desktop_prompt && selectedWebsite.desktop_prompt.enabled}
                 onChange={handleCheckDesktop}
              />}
  /> : null}

【讨论】:

  • 试过了,但仍然没有运气,仍然得到同样的错误。我已经安慰了 Object.keys(selectedWebsite).length 但它仍在执行代码但我应该执行 null 而不是
【解决方案2】:

试试这个。

{
                    selectedWebsite && selectedWebsite.desktop_prompt ?
                    <FormControlLabel style={{"margin-left": "auto"}}
                                      control={<Switch size="small"
                                                       checked={selectedWebsite.desktop_prompt.enabled}
                                                       onChange={handleCheckDesktop}/>}
                    /> :
                    null
                }

【讨论】:

  • 试过了,但仍然没有运气,仍然得到同样的错误。我已经安慰了 Object.keys(selectedWebsite).length 但它仍在执行代码但我应该执行 null 而不是
  • 您能否在问题中提及selectedWebsite 的值?
  • 代码运行的唯一方式是selectedWebsite.desktop_prompt 的值既不是null 也不是undefined
  • 我已经提到它是一个空对象{}。
  • 我已经在控制台中记录了 selectedWebsite 和 selectedWebsite.desktop_prompt 的值,它的 {} 和 undefined
最近更新 更多