You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React.js的return方法中如何编写JS代码,解决checkPwd条件渲染编译报错

报错根因

JSX 中用 {} 包裹的嵌入代码只支持JavaScript表达式(即执行后有返回值的代码片段),你写的 if...else if 属于条件语句,不符合JSX的语法要求,因此触发编译报错。

修复方案

下面提供3种常用的可行实现方式,可根据实际场景选择:

方案1:使用三元运算符实现多分支判断

直接在{}内写三元表达式,符合表达式语法要求:

<FormControl>
  <Stack style={styles.stack}>
    <Input
      type="password"
      placeholder="Confirm Password"
      isInvalid={checkPwd !== "correct"}
    />
    {
      checkPwd === "empty" 
        ? <FormControl.ErrorMessage>Please confirm password.</FormControl.ErrorMessage>
        : checkPwd === "invalid"
        ? <FormControl.ErrorMessage>Password is not strong enough.</FormControl.ErrorMessage>
        : null
    }
  </Stack>
</FormControl>

注:这里同时优化了isInvalid的判断逻辑,原来的三元判断可以直接简化为checkPwd !== "correct",功能完全一致,代码更简洁。

方案2:使用逻辑与(&&)运算符分条件判断

分开写两个独立的条件判断,逻辑更直观:

<FormControl>
  <Stack style={styles.stack}>
    <Input
      type="password"
      placeholder="Confirm Password"
      isInvalid={checkPwd !== "correct"}
    />
    {checkPwd === "empty" && <FormControl.ErrorMessage>Please confirm password.</FormControl.ErrorMessage>}
    {checkPwd === "invalid" && <FormControl.ErrorMessage>Password is not strong enough.</FormControl.ErrorMessage>}
  </Stack>
</FormControl>

方案3:提前在return外部计算要渲染的错误节点

如果判断逻辑更复杂,推荐把逻辑抽到return外,JSX代码会更整洁易读:

// 在组件return之前先计算错误提示内容
const renderPwdError = () => {
  if (checkPwd === "empty") {
    return <FormControl.ErrorMessage>Please confirm password.</FormControl.ErrorMessage>
  } else if (checkPwd === "invalid") {
    return <FormControl.ErrorMessage>Password is not strong enough.</FormControl.ErrorMessage>
  }
  return null
}

// return内直接调用方法即可
return (
  <FormControl>
    <Stack style={styles.stack}>
      <Input
        type="password"
        placeholder="Confirm Password"
        isInvalid={checkPwd !== "correct"}
      />
      {renderPwdError()}
    </Stack>
  </FormControl>
)

内容的提问来源于stack exchange,提问作者ComMa915

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:12:01