javascript - 如何在 react-select 中合并 selectedOptions

标签 javascript reactjs react-select

我使用 react-select,我是新手。我有一个名为 Example 的组件

const colourOptions = [
  { value: '1', label: '1', color: '#00B8D9' },
  { value: '2', label: '2', color: '#0052CC' },
  { value: '3', label: '3', color: '#5243AA' },
];

class Example extends React.Component {
      state = {
        selectedOption: null,
      }

      render() {
        const { selectedOption, onHandleChange } = this.props;
        return (

          <Select
            onChange={onHandleChange}
            options={colourOptions}
          />

        );
      }
    }

    export default Example;

在另一个文件中我们有一个功能组件

export default function UserProfile() {
  const [selectedOption, setSelectedOption] = useState({});

  const handleChange = (selectedOption) => {
    setSelectedOption(selectedOption)
    console.log(selectedOption)
  };

  return (
    <div>

      <Example onHandleChange={handleChange} selectedOption={selectedOption}/>
      <Example onHandleChange={handleChange} selectedOption={selectedOption}/>
      <Example onHandleChange={handleChange} selectedOption={selectedOption}/>

    </div>
  );
}

通过更改每个 Example,删除了先前 selectedOption 的值。 如何将所有 selectedOptions 放入(合并)一个对象中?

最佳答案

您需要为所有 Example 实例维护一个单独的选项值。

像这样:

export default function UserProfile() {
    const [selectedOption, setSelectedOption] = useState({ example1: '', example2: '', example3: '' });

    const handleChange = (key, selectedOption) => {
        setSelectedOption(prev => ({...prev, [key]: selectedOption}));
        console.log(selectedOption)
    };

    return (
        <div>
            <Example1 onHandleChange={(value) => handleChange('example1', value)} selectedOption={selectedOption.example1}/>
            <Example2 onHandleChange={(value) => handleChange('example3', value)} selectedOption={selectedOption.example2}/>
            <Example3 onHandleChange={(value) => handleChange('example3', value)} selectedOption={selectedOption.example3}/>
        </div>
    );
}

编辑 工作代码在这里:

https://codesandbox.io/s/eloquent-mclaren-8s2z2?file=/src/UserProfile.js

另请注意 - 状态更新是异步的,因此当您在设置状态后立即执行 console.log 时,您可能会看到日志打印旧状态。

阅读more here如果你喜欢

关于javascript - 如何在 react-select 中合并 selectedOptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61152641/

相关文章:

reactjs - 从外部material-ui组件访问主题

javascript - React Router,我如何告诉路由器渲染到组件?

javascript - 警告 : Functions are not valid as a React child. ReactJS

reactjs - 如何修复 react 选择下拉组件中搜索框的宽度?

javascript - React-Select - 替换自定义选项内容的组件

javascript - 无法更改所选选项的背景颜色 | react 选择

JavaScript - 检查字符串中的任何小写字母

javascript - javascript中如何知道函数参数的类型

javascript - Firestore Cloud Functions 优先级

Javascript:从唯一对象数组中删除具有重复键值对的元素,除了第一个这样的元素(不重复)