2016-07-29 6 views
0

Я использую компонент для ввода Input Select Select SelectInput.Передача значения от дочернего к родительскому без onChange response

Вот мой код:

'use strict' 
import React from 'react' 

class SelectInput extends React.Component{ 
    constructor(props){ 
     super(props); 
     this.state = { 
      select: "", 
      items: [] 
     } 
     this.handleChange = this.handleChange.bind(this)  
    } 

    . 
    . 
    . 

    handleChange(event){ 
     console.log(event.target.value) 
     this.setState({ 
      select: event.target.value 
     }); 
     if(this.props.onChange) { 
      this.props.onChange(event) 
     } 
    } 

    render(){ 
     let disabled = this.state.items.length > 1 ? false : true, 
      selected = this.state.items ? this.state.items[0] : "" 
     return (
      <select name={this.props.name} disabled={disabled} defaultValue={selected} value={this.state.select} onChange={this.handleChange}> 
       {this.state.items && this.state.items.map(item => 
        <option value={item} >{item}</option> 
       )} 

      </select> 
     ) 
    } 
} 

Моя проблема в том, когда мой выбор есть только один вариант, я отключить выбрать и вставить значение по умолчанию. Но я не получаю значение события onChange для передачи родительскому компоненту.

Как это сделать?

Заранее спасибо

+0

если отключить элемент? почему вы, кроме события изменения? и почему вы отключите элемент? почему пользователь будет взаимодействовать с отключенным элементом? –

+0

Я отключу элемент, потому что компонент имеет только один клиент, и этот компонент знает этого клиента. У меня есть список стран, но на данный момент у меня есть только одна страна. Итак, почему я включу выбор? И если у меня есть два или более элемента и установить значение по умолчанию для первого элемента списка, как передать этот элемент в родительский компонент, если я не изменил выбор? –

+0

, в этом случае вы можете вызвать 'handleChange()' при рендеринге, если нет элементов 1. Поскольку пользователь никак не может взаимодействовать с элементом. –

ответ

1

Я предполагаю, что если вы хотите вызвать метод handleChange даже один элемент к тому, состоянию уточненного и/или вызова обработчика onChange принятого реквизитом.

В какой-то момент ваш state.items должны быть заполнены:

componentWillMount(){ 
    // load data (ajax or hard-coded) 
    let items = ['toto']; 
    let select = items.length ? items[0] : ''; 
    this.setState({ 
    items, 
    select 
    }); 
    if(this.props.onChange) { 
    this.props.onChange(select); 
    } 
} 

Я удалил selected переменную и атрибут defaultValue в методе render:

render(){ 
    let disabled = this.state.items.length > 1 ? false : true; 

    return (
     <select name={this.props.name} disabled={disabled} value={this.state.select} onChange={this.handleChange}> 
     {this.state.items && this.state.items.map((item, i) => 
      <option key={i} value={item} >{item}</option> 
     )} 
     </select> 
    ) 
} 
+0

Отличный пункт;) Это было что-то вроде этого, что я искал –

Смежные вопросы