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

React项目中useState定义的状态变量提示未定义问题求解

问题原因

你的所有表单字段状态都统一存放在newMessage状态对象中,没有单独声明senderName、senderEmail、senderCompanyName、message这几个独立变量,因此在JSX中直接引用这些变量名时,就会触发ESLint的未定义报错。

解决方案

将JSX中表单元素的value属性取值路径修改为从newMessage对象中读取即可,修正后的表单核心代码如下:

<input
  className="input"
  type="text"
  name="senderName"
  value={newMessage.senderName}
  onChange={onChange}
  placeholder="Your name"
  required
/>
<input
  className="input"
  type="text"
  name="senderEmail"
  value={newMessage.senderEmail}
  onChange={onChange}
  placeholder="Your email"
  required
/>
<input
  className="input"
  type="text"
  name="senderCompanyName"
  value={newMessage.senderCompanyName}
  onChange={onChange}
  placeholder="Your company's name (optional)"
/>
<textarea
  className="input"
  rows="10"
  type="text"
  name="message"
  value={newMessage.message}
  onChange={onChange}
  placeholder="Write your message here..."
  required
></textarea>

额外优化建议

你当前的提交逻辑中,请求完成后直接将接口返回的data赋值给newMessage,如果后端返回结构和初始表单结构不一致,会导致后续表单操作异常。建议提交成功后将表单重置为初始状态,可按如下方式调整代码:

// 抽离初始状态常量
const INITIAL_MESSAGE = {
  date: new Date(),
  recieverID: company.id,
  senderName: "",
  senderEmail: "",
  senderCompanyName: "",
  message: ``,
}

const SendMessage = ({ company }) => {
  const myCompanyContext = useContext(companyContext);
  const { convertToLink } = myCompanyContext;

  // 初始化状态
  const [newMessage, setNewMessage] = useState(INITIAL_MESSAGE);

  const addMessage = async input => {
    const requestOptions = {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(input),
    };
    const response = await fetch(
      "http://localhost:5002/messages",
      requestOptions
    );
    const data = await response.json();
    // 提交成功后重置表单
    setNewMessage(INITIAL_MESSAGE);
  };
  // 其余逻辑保持不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:18:04