reactjs - 如何格式化 React Select 的值

标签 reactjs react-select react-final-form

我使用“react final forms”和“react select”。

我已经组织了一个界面和功能,但我有一点不喜欢。

React select 需要下一种格式的选项:

const options = [
  { value: 'chocolate', label: 'Chocolate' },
  { value: 'strawberry', label: 'Strawberry' },
  { value: 'vanilla', label: 'Vanilla' }
]

并且该值也应设置为 { value: 'chocolate', label: 'Chocolate' }。

但对我来说,在我的数据模型中(也发送到服务器)这样的值很奇怪 - { value: 'chocolate', label: 'Chocolate' },因为我只需要 'chocolate'。

简单的方法是在保存表单后将对象格式化为单个值,并在呈现元素之前从单个值格式化回对象。我知道如何在表单之外执行此操作,但在这种情况下,我应该为每个选择元素分别一次又一次地解决这个问题。

我想做什么:

  1. 找到一种方法来将 react select 的值设置为单个值,例如“巧克力”而不是对象。

  1. 为 react 选择组件创建一个包装器并在那里设置值(这很容易)和当表单从该字段获取值时(我不知道该怎么做)。

我将不胜感激。

最佳答案

方法一

带字符串:

import React, { useState } from "react";
import ReactDOM from "react-dom";
import Select from "react-select";

const data = ["1", "2"];

function SingleStringReactSelect() { 
  const [option, setOption] = useState();
  return (
    <section>
      <Select 
        onChange={option => setOption(option)}
        value={[option]}
        getOptionLabel={label => label}
        getOptionValue={value => value}
        closeMenuOSelect={false}
        options={data}
      />
    </section>
  );
}

方法二:

创建示例: https://codesandbox.io/s/react-codesandboxer-example-z57ke

您可以在选项中使用 map ,并使用 SingleValueReactSelect 等 Wrapper

import React, { Fragment, useState } from "react";
import Select from "react-select";

const data = ["chocolate", "strawberry", "vanilla"];

export function SingleValueReactSelect(props) {
  const [selectedItem, setSelectedItem] = useState();
  return (
    <Select
      {...props}
      value={selectedItem}
      onChange={item => {
        setSelectedItem(item);
        props.onChange(item.value);
      }}
      options={props.options.map(item => ({ label: item, value: item }))}
    />
  );
}

export default function AppDemo() {
  return (
    <Fragment>
      <p>SingleValueReactSelect Demo</p>
      <SingleValueReactSelect
        isClearable
        isSearchable
        options={data}
        onChange={item => {
          alert(item);
        }}
      />
    </Fragment>
  );
}

关于reactjs - 如何格式化 React Select 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58655286/

相关文章:

javascript - "ComponentDidMount"如果我从服务器请求数据,钩子(Hook)会触发内存泄漏

css - 停止在上方展开 div 的下拉菜单

javascript - 如何使用字符串数组作为 react 选择中的选项

javascript - 如何使必填字段动态 react ?

javascript - 如何在数组react-final-form中设置错误

javascript - @for 在样式组件中循环

reactjs - 未处理的拒绝(SecurityError): The operation is insecure. 在新的 create-react-app 项目上

javascript - 自定义 SingleValue 和选项 react 选择 - 选项显示,但 SingleValue 不显示

reactjs - React + Redux - 在初始加载时触发选择 onChange()

reactjs - 在子组件中使用 DropDown 的 React-Final-Form,如何?