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

如何在React Material UI+Formik场景下实现下拉值追加到输入框而非覆盖

解决方案

问题出在你当前的Autocomplete onChange回调逻辑里,直接把message字段赋值为下拉选中值,自然会覆盖原有内容,只需要调整赋值逻辑,先读取已有message内容再做拼接即可。

修改后的代码如下:

<Autocomplete
  value={values.variable}
  options={variables}
  getOptionSelected={(option, value) => option === value}
  getOptionLabel={(data) => data}
  onChange={(e, value) => {
    setFieldValue("variable", value);
    // 原有内容在前,新选中值在后,中间用空格分隔,不需要分隔可以去掉空格
    setFieldValue("message", `${values.message || ''}${value}`);
  }}
  fullWidth
  renderInput={(params) => (
    <TextField
      {...params}
      name="variable"
      size="small"
      variant="outlined"
      onBlur={handleBlur}
      helperText={touched.variable ? errors.variable : ""}
      error={touched.variable && Boolean(errors.variable)}
    />
  )}
/>

可选优化

  • 上面代码中加了|| ''兼容逻辑,可以避免初始message为undefined时拼接出undefinedxxx的异常内容
  • 如果希望选中变量后下拉框自动清空,方便连续追加多个变量,可以在onChange回调末尾添加setFieldValue("variable", "")
  • 如果需要用其他符号(比如换行、逗号、花括号)包裹追加的变量,直接修改拼接逻辑即可,比如要包裹成变量模板格式就改成${values.message || ''}{${value}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 13:36:03