React-select 不在字段中显示所选值

React-select does not show the selected value in the field

提问人:RamAlx 提问时间:4/6/2017 最后编辑:Shubham KhatriRamAlx 更新时间:3/26/2022 访问量:76892

问:

我有一个 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>
  );
};

你知道为什么吗?

JavaScript 反应JS onchange 反应选择

评论

0赞 Shubham Khatri 4/6/2017
你能展示一下,你是如何传递 portfolioSelector 函数的
0赞 RamAlx 4/6/2017
我通过这个组件的容器使它成为一个道具。让我告诉你: const mapDispatchToProps = dispatch => ( { portfolioSelector: (currentPortfolio) => { dispatch(portfolioSelector(currentPortfolio));
0赞 Amr Aly 4/6/2017
我认为你需要onChange={value => portfolioSelector(value)}onChange={event => portfolioSelector(event.target.value)}
0赞 RamAlx 4/6/2017
我之前做过这个改变,但它没有用......
2赞 Mayank Shukla 4/6/2017
我认为您需要像这样分配值:选择。value={/*value passed in onchange/*}

答:

4赞 Rahmat Aligos 4/6/2017 #1

第一件事是你创建了错误的数组,如果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"
      />

评论

0赞 RamAlx 4/6/2017
我想在我的状态中添加值数据。但是,此功能工作正常。该值存储在我的状态中。问题是我在投资组合输入中看不到所选值。我想你的答案不是我想要的,但非常感谢:)
0赞 Rahmat Aligos 4/7/2017
你能给我你选择输入的 screeshot 结果吗?
-6赞 Özberk Çetin 5/10/2017 #2
opts = [{label: any, value:1}, {label:Two, value:2}]

value 必须为 string。

评论

2赞 AP. 5/10/2017
否,将自动被视为字符串。这个答案不会给答案增加任何有意义的东西,如果有的话,应该写成评论。value
1赞 Özberk Çetin 5/11/2017 #3

我修好了。您忘记了添加值属性。使用这个,检查工作代码:

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} />
17赞 mkaya387 5/26/2020 #4

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

演示: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>
  );
}

评论

0赞 arslion 2/8/2022
不工作groupedOptions
0赞 Karli Ots 7/4/2023
这是出于某种原因而起作用的。
8赞 cool 2/1/2021 #5
<Select
options={this.props.locale}
onChange={this.selectCountryCode}
value={{label : this.state.selectedCountryLabel}}
/>

value 属性需要形状 Array。

评论

0赞 Noor Muhammad 9/23/2021
最简单的解决方案。谢谢伙计。
0赞 Salem Feyzo 4/1/2021 #6

这是我的解决方案

演示: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>
  )
}

3赞 Gabriel Rodrigues 5/4/2021 #7

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

value={selectedOption.label}
10赞 Daniel Danielecki 11/21/2021 #8

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

长话短说;工作方式不同。你会期望value

value={MY_VALUE},但它反而有效

value={{label: MY_VALUE}}.

评论

1赞 John Skoumbourdis 2/16/2022
感谢@Daniel Danielecki 为我指明了正确的方向。你真的救了我的一天。请注意,我的解决方案是这样的:似乎您需要添加 AND 作为对象。只是标签作为值对我不起作用:(<Select ... value={{label: permittedValues[value], value}} options={options}></Select>labelvalue
1赞 med ali mahdhaoui 2/15/2022 #9

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

0赞 Krishan Kumar 3/26/2022 #10

请同时提供标签和值对象,例如{label: ?, value: ?}

const selectedValue = options.find(x => x.value===value);
<Select
    id="portf"
    options={opts}
    onChange={value => portfolioSelector(value)}
    placeholder="Select Portfolio"
    value={label : selectedValue.label, value: (value ? selectedValue.value : "")}
/>