12

我有一个 react-select 组件,我定义如下:

<Select
            id="portf"
            options={opts}
            onChange={value => portfolioSelector(value)}
            placeholder="Select Portfolio"
          />

opts = [{label: any, value:1}, {label:Two, value:2}].

选择时的值通过portfolioSelector函数存储在状态中。问题是当我选择一个值时,它没有显示在选择字段中。我的主要组件是这样的:

const PortfolioSelector = ({
  opts,
  portfolioSelector
}) => {
  if (opts) {
    return (
      <div className="portfolio select-box">
        <label htmlFor="selectBox" className="select-box__label">
        Portfolio
        </label>
        <div className="select-box__container">
          <Select
            id="portf"
            options={opts}
            onChange={value => portfolioSelector(value)}
            placeholder="Select Portfolio"
          />
        </div>
        <div className="separator" />
      </div>
    );
  }
  return (
    <div>Loading</div>
  );
};

你知道为什么吗?

4

9 回答 9

11

这是我使用的替代解决方案。

演示: https ://codesandbox.io/s/github/mkaya95/React-Select_Set_Value_Example

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

export default function App() {
  const [selectedOption, setSelectedOption] = useState("none");
  const options = [
    { value: "none", label: "Empty" },
    { value: "left", label: "Open Left" },
    { value: "right", label: "Open Right" },
    {
      value: "tilt,left",
      label: "Tilf and Open Left"
    },
    {
      value: "tilt,right",
      label: "Tilf and Open Right"
    }
  ];
  const handleTypeSelect = e => {
    setSelectedOption(e.value);
  };

  return (
    <div>
      <Select
        options={options}
        onChange={handleTypeSelect}
        value={options.filter(function(option) {
          return option.value === selectedOption;
        })}
        label="Single select"
      />
    </div>
  );
}
于 2020-05-25T23:50:43.213 回答
6
<Select
options={this.props.locale}
onChange={this.selectCountryCode}
value={{label : this.state.selectedCountryLabel}}
/>

value 属性需要形状数组。

于 2021-01-31T19:26:34.790 回答
4

首先是您创建了错误的数组,如果 label: any 或 Two 是字符串,您必须添加双引号。看这个:

opts = [{label: "any", value:1}, {label:"Two", value:2}]

其次,您必须记住这种情况下的选项是 opts 是一个具有标签和值的对象数组,您要添加什么数据到您的状态?

      <Select
        id="portf"
        options={opts}
        onChange={value => portfolioSelector(value.value /* or if you want to add label*/ value.label)}
        placeholder="Select Portfolio"
      />
于 2017-04-06T11:47:47.187 回答
2

处理得value非常糟糕,它需要像这里这样的黑客,解释在这里

长话短说; value作品不同。你会期待

value={MY_VALUE},但它可以代替

value={{label: MY_VALUE}}.

于 2021-11-20T19:01:31.863 回答
1

您可以简单地将 value 属性作为Selected.label

value={selectedOption.label}
于 2021-05-03T17:44:00.263 回答
1

我修好了它。 您忘记了增值属性。使用它,检查工作代码:

const opts = [{ label: 'any', value: 1 }, { label: 'Two', value: 2 }];

const PortfolioSelector = ({ options }) => {
  if (options) {
    return (
      <div className="portfolio select-box">
        <label htmlFor="selectBox" className="select-box__label">
          Portfolio
        </label>
        <div className="select-box__container">
          <Select
            id="portf"
            options={options}
            value={this.state.opts1}
            onChange={value => this.setState({ opts1: value })}
            placeholder="Select Portfolio" />
        </div>
        <div className="separator" />
      </div>
    );
  }
  return <div>Loading</div>;
};

并调用您的组件

<PortfolioSelector options={opts} />
于 2017-05-10T17:44:56.937 回答
0

对于任何面临 React-Select 填充问题或 React-select 未获得选定值的人;尝试给它一个动态键属性,每次数据更改时都会更改(选项数组或选定选项),因此它将使用新数据重新渲染。

于 2022-02-15T09:03:19.603 回答
0

这是我的解决方案

演示:https ://codesandbox.io/s/prod-rgb-o5svh?file=/src/App.js

代码:

import axios from 'axios'
import {useEffect, useState} from 'react'
import Select from 'react-select'
import "./styles.css";

export default function App() {
  const [users, setUsers] = useState()
  const [userId, setUserId] = useState()

  useEffect(()=>{
    const getUsers = async () => {
      const {data} = await axios.get('https://jsonplaceholder.typicode.com/users')
      setUsers(data)
    }
    getUsers()
  },[])
const options = users && users.map(user =>{
  return {label: user.name, value: user.id}
})
console.log(userId)
  return (
    <div className="App">
     {users && (
       <Select 
       placeholder='Select user...'
       isSearchable
       value={options.label}
       options={options}
       onChange={(option) => setUserId(option.value) }
       />
     )}
    </div>
  )
}

于 2021-04-01T09:21:19.133 回答
-5
opts = [{label: any, value:1}, {label:Two, value:2}]

值必须是字符串。

于 2017-05-10T14:54:34.670 回答