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

React表单内变量无法实现组件条件渲染的问题求助

解决提交错误答案时的组件条件渲染问题

你现在的核心问题是:直接在onSubmit回调里写<Wrong />组件不会生效——React组件只能在组件的渲染流程(JSX返回部分)里输出,回调里的JSX不会被挂载到DOM上。用state控制渲染是正确思路,只需调整变量作用域,把状态提到组件顶层即可,具体改法如下:

步骤1:添加状态变量

在组件顶层(表单外部)用useState声明一个状态,用来控制错误组件的显示/隐藏:

import { useState } from 'react';
// ...其他必要导入(比如react-hook-form的相关方法)

function YourGameComponent() {
  const [showWrongHint, setShowWrongHint] = useState(false);
  // ...这里放champions、correctChampion等已定义的变量

步骤2:修改表单提交逻辑

在onSubmit回调里,根据输入是否正确更新状态,不再直接渲染组件:

<form
  onSubmit={handleSubmit((data) => {
    const userInput = data.guess;
    const isAnswerCorrect = userInput.toUpperCase() === correctChampion.toUpperCase();
    
    if (!isAnswerCorrect) {
      setShowWrongHint(true);
    } else {
      // 答对后的逻辑,比如重置错误提示、触发成功动画等
      setShowWrongHint(false);
    }
  })}
>

步骤3:在渲染流程里加入条件渲染

在表单下方(或你希望显示错误提示的位置),用条件渲染控制<Wrong />的显示:

</form>
{showWrongHint && <Wrong text="Class" alt="wrong img" img={wrong} />}

完整修改后的代码示例

import { useState } from 'react';
import { useForm, handleSubmit, register } from 'react-hook-form';
// 导入Wrong组件和对应的错误图片

function LeagueWordle() {
  const [showWrongHint, setShowWrongHint] = useState(false);
  const { register, handleSubmit } = useForm();
  // 假设以下变量已提前定义
  const champions = {/* 你的英雄列表对象 */};
  const correctChampion = "正确英雄名称";

  return (
    <main class="gameSection">
      <h1>Welcome to League of Wordle!</h1>
      <form
        onSubmit={handleSubmit((data) => {
          const userInput = data.guess;
          const isAnswerCorrect = userInput.toUpperCase() === correctChampion.toUpperCase();

          if (!isAnswerCorrect) {
            setShowWrongHint(true);
          } else {
            setShowWrongHint(false);
            // 可添加答对后的额外逻辑,比如清空输入框、显示成功提示
          }
        })}
      >
        <input 
          {...register("guess")} 
          class="guess_input" 
          placeholder="Enter Champion Name Here" 
          type="text" 
          // 可选:输入时自动隐藏错误提示
          onChange={() => setShowWrongHint(false)}
        />
        <input class="guess_input" type="submit" />
      </form>
      {/* 条件渲染错误组件 */}
      {showWrongHint && <Wrong text="Class" alt="wrong img" img={wrong} />}
    </main>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:57:14