Eu tenho um problema ao usar o react-select. Eu uso redux form e tornei meu componente react-select compatível com redux form. Aqui está o código:
const MySelect = props => (
<Select
{...props}
value={props.input.value}
onChange={value => props.input.onChange(value)}
onBlur={() => props.input.onBlur(props.input.value)}
options={props.options}
placeholder={props.placeholder}
selectedValue={props.selectedValue}
/>
);
e aqui como eu o renderizo:
<div className="select-box__container">
<Field
id="side"
name="side"
component={SelectInput}
options={sideOptions}
clearable={false}
placeholder="Select Side"
selectedValue={label: 'Any', value: 'Any'}
/>
</div>
Mas o problema é que minha lista suspensa não tem um valor padrão como desejo. O que estou fazendo de errado? Alguma ideia?
reactjs
default-value
react-select
user7334203
fonte
fonte
Respostas:
Eu acho que você precisa de algo assim:
const MySelect = props => ( <Select {...props} value={props.options.filter(option => option.label === 'Some label')} onChange={value => props.input.onChange(value)} onBlur={() => props.input.onBlur(props.input.value)} options={props.options} placeholder={props.placeholder} /> );
fonte
selectedValue
foi alterado paravalue
. Verifique os documentos react-select.com/propsdefaultValue
campo agora na nova versão.Eu usei o parâmetro defaultValue, abaixo está o código de como eu alcancei um valor padrão, bem como atualizo o valor padrão quando uma opção é selecionada no menu suspenso.
<Select name="form-dept-select" options={depts} defaultValue={{ label: "Select Dept", value: 0 }} onChange={e => { this.setState({ department: e.label, deptId: e.value }); }} />
fonte
Se você veio aqui para reagir-select v2, e ainda tendo problemas - versão 2 agora só aceita um objeto como
value
,defaultValue
, etc.Ou seja, tente usar
value={{value: 'one', label: 'One'}}
, em vez de apenasvalue={'one'}
.fonte
{value: 'one', label: 'One'}
dado aqui é apenas um exemplo. Em sua aplicação, isso seria uma variável / prop com uma estrutura idêntica.Eu estava tendo um erro semelhante. Certifique-se de que suas opções tenham um atributo de valor.
Em seguida, combine o valor do elemento selects inicialmente com o valor das opções.
<select value={this.value} />
fonte
Estendendo a resposta de @ isaac-pak, se você quiser passar o valor padrão para seu componente em um prop, você pode salvá-lo no estado no método de ciclo de vida componentDidMount () para garantir que o padrão seja selecionado na primeira vez.
Observe, eu atualizei o código a seguir para torná-lo mais completo e usar uma string vazia como o valor inicial para o comentário.
export default class MySelect extends Component { constructor(props) { super(props); this.state = { selectedValue: '', }; this.handleChange = this.handleChange.bind(this); this.options = [ {value: 'foo', label: 'Foo'}, {value: 'bar', label: 'Bar'}, {value: 'baz', label: 'Baz'} ]; } componentDidMount() { this.setState({ selectedValue: this.props.defaultValue, }) } handleChange(selectedOption) { this.setState({selectedValue: selectedOption.target.value}); } render() { return ( <Select value={this.options.filter(({value}) => value === this.state.selectedValue)} onChange={this.handleChange} options={this.options} /> ) } } MySelect.propTypes = { defaultValue: PropTypes.string.isRequired };
fonte
value
sustentaçãoselect
não deve ser nula. Considere usar uma string vazia para limpar o componente ouundefined
para componentes não controlados.Warning: A component is changing a controlled input of type hidden to be uncontrolled. Input elements should not switch from controlled to uncontrolled (or vice versa).
Acabei de passar por isso sozinho e escolhi definir o valor padrão na função INIT do redutor.
Se você vincular seu select com redux, então é melhor não 'desvinculá-lo' de um valor padrão de seleção que não representa o valor real, em vez disso, defina o valor ao inicializar o objeto.
fonte
Se você não estiver usando redux-form e estiver usando o estado local para alterações, seu componente react-select pode ter a seguinte aparência:
class MySelect extends Component { constructor() { super() } state = { selectedValue: 'default' // your default value goes here } render() { <Select ... value={this.state.selectedValue} ... /> )}
fonte
Use props defaultInputValue assim:
<Select name="name" isClearable onChange={handleChanges} options={colourOptions} isSearchable="true" placeholder="Brand Name" defaultInputValue="defaultInputValue" />
para mais referência https://www.npmjs.com/package/react-select
fonte
Se suas opções são assim
var options = [ { value: 'one', label: 'One' }, { value: 'two', label: 'Two' } ];
Você
{props.input.value}
deve corresponder a um dos'value'
em seu{props.options}
Ou seja,
props.input.value
deve ser'one'
ou'two'
fonte
Para selecionar automaticamente o valor de em selecione.
<div className="form-group"> <label htmlFor="contactmethod">Contact Method</label> <select id="contactmethod" className="form-control" value={this.state.contactmethod || ''} onChange={this.handleChange} name="contactmethod"> <option value='Email'>URL</option> <option value='Phone'>Phone</option> <option value="SMS">SMS</option> </select> </div>
Use o atributo de valor na tag de seleção
value={this.state.contactmethod || ''}
a solução está funcionando para mim.
fonte
Altere o estado do valor da opção padrão nesta função do manipulador de eventos para nulo
Class MySelect extends React.Component { constructor() { super() this.handleChange = this.handleChange.bind(this); this.state = { selectDefault: "Select An Option" } } handleChange(event) { const selectedValue = event.target.value; //do something with selectedValue this.setState({ selectDefault: null }); } render() { return ( <select name="selectInput" id="selectInput" onChange={this.handleChange} value= {this.selectedValue}> {this.state.selectDefault ? <option>{this.state.selectDefault}</option> : ''} {'map list or static list of options here'} </select> ) } }
fonte
Estou usando frequentemente algo assim.
if(Defaultvalue ===item.value) { return <option key={item.key} defaultValue value={item.value}>{plantel.value} </option> } else { return <option key={item.key} value={item.value}>{plantel.value} </option> }
fonte
Você precisa fazer uma pesquisa profunda se usar grupos nas opções:
options={[ { value: 'all', label: 'All' }, { label: 'Specific', options: [ { value: 'one', label: 'One' }, { value: 'two', label: 'Two' }, { value: 'three', label: 'Three' }, ], }, ]}
const deepSearch = (options, value, tempObj = {}) => { if (options && value != null) { options.find((node) => { if (node.value === value) { tempObj.found = node; return node; } return deepSearch(node.options, value, tempObj); }); if (tempObj.found) { return tempObj.found; } } return undefined; };
fonte