这是我的目标:

const [opportunity, setOpportunity] = useState({
    name: '',
    description: '',
    experience: '',
});

我想将其存储在opportunity experience属性中,就像用逗号分隔的字符串一样.例如:"experience\u 1,experience\u 2,experience\u 3".

但是,当我在输入字段中键入时,我希望能够在单词之间留有空格.例如:experience\u 1 experience\u 2 experience\u 3

这是我输入字段的代码:

        <InputField
        type='text'
        value={opportunity.experience.split(',').join(' ')} // i think i need changes here
        onChange={(e) => setOpportunity({ ...opportunity, experience: e.currentTarget.value.split(" ").filter(x => x !== '').toString() })} // i think this works
        label={"Experiences"}
    />

有人帮忙吗?

推荐答案

.filter(x => x !== '')替换为.replace(/\s+/g, " "),并将其放置在调用.split()方法之前.这将用单个空间替换多个空间,并防止用户一次输入多个空间,同时允许他们更改InputField组件的内容.请记住,.filter()处理字符串的克隆副本,而.replace()处理字符串本身,在本例中是事件当前目标值.

现在它应该按预期工作.

像这样:

<InputField
    type="text"
    value={opportunity.experience
      .split(",")
      .map((x) => x.trim()) // Added .trim() to keep consistent spacing...
      .join(" ")} // ...before joining
    onChange={(e) => {
      setOpportunity({
        ...opportunity,
        experience: e.currentTarget.value
          .replace(/\s+/g, " ") // If you try to use .filter() here, it won't work
          .split(" ")
          .toString(),
      });
    }} 
    label={"Experiences"}
  />

我还将state属性中的每个值上的trim操作链接为.map(),以便在演示过程中保持间距一致,以防state属性在每个经验值之间使用大量空格进行初始化.

Javascript相关问答推荐

react 路由加载程序行为

如何最好地从TypScript中的enum获取值

了解Node.js中的EventEums和浏览器中的addEventEums之间的关系

togglePopover()不打开但不关闭原生HTML popover'

网页自检测外部元素无法加载

Angular material 拖放堆叠的牌副,悬停时自动展开&

Regex结果包含额外的match/group,只带一个返回

如何避免页面第一次加载时由于CSS样式通过JavaScript更改而出现闪烁

覆盖TypeScrip中的Lit-Element子类的属性类型

确保函数签名中的类型安全:匹配值

如何在不影响隐式类型的情况下将类型分配给对象?

在Reaction中的handleSubmit按钮内,useSelector值仍然为空

Phaserjs-创建带有层纹理的精灵层以自定义外观

在验证和提交表单后使用useNavigate()进行react 重定向,使用带有加载器和操作的路由

为什么延迟在我的laravel项目中不起作用?

通过跳过某些元素的对象进行映射

将字符串解释为数字;将其重新编码为另一个基数

在openstreemap/leaflet中,当鼠标在 map 上移动时,如何在小工具提示中实时显示坐标

如何将PNG图像放在wix站点的Open Streemap map 上,使PNG图像成为 map 不可分割的一部分?

获取S点击的元素类(这?)并将其应用于另一个元素(目标),同时删除目标元素上的所有类