2017-05-30 23 views
0

第一次选择时,应该过滤第二次,或通过向Api请求流行。如何填充选择选项并筛选Redux表单中的FieldArray中的第二个选择?

我遇到的问题是,当进入第二个字段时,状态被共享给选项,并且当修改任何字段时,修改所有选项。

class FieldCentroCusto extends Component { 
    constructor(){ 
    super() 
    this.state = { 
     itensObra: [] 
    } 
    this.toggleItens = this.toggleItens.bind(this) 
    } 
    toggleItens(event) { 
    this.props.optionsObras.map(obra => { 
     if (event.target.value === obra.nome) { 
      return this.setState({ 
       itensObra: obra.itens 
      }) 
     } 
     return false 
    }) 
    } 

    render() { 
    const renderItens = ({ fields, optionsObras }) => (
     <div> 
     <Button color="primary" type="button" onClick={() => fields.push({})}> 
      <i className="fa fa-plus"></i> Adicionar Item de Custo 
     </Button> 
     <br /><br /> 
     <table className="table table-bordered table-hover"> 
      <thead className="thead-inverse"> 
      <tr> 
       <th>Obra</th> 
       <th>Centro de Custo</th> 
      </tr> 
      </thead> 
      <tbody> 
      {fields.map((item, itemIndex) => 
      <tr key={itemIndex}> 
       <td> 
        <Field name={`${item}.obra`} component={LabelAndSelect} 
          onChange={this.toggleItens} options={ 
          optionsObras.map((option, optionIndex) => { 
           return {value: `${option.nome === undefined?'': 
            option.nome}`, label: `${option.nome === undefined?'': 
            option.nome}`} 
           } 
          )} /> 
       </td> 
       <td> 
       <Field name={`${item}.itemObra`} component={LabelAndSelect} 
          options={this.state.itensObra.map((option, optionIndex) => { 
           return {value: `${option.descricao === undefined?'': 
           option.descricao}`, label: `${option.descricao === undefined?'': 
           option.descricao}`} 
           } 
          )} /> 
       </td> 
      </tr> 
      )} 
      </tbody> 
     </table> 
     </div> 
    ) 

    return (
     <FieldArray name="centrosCusto" 
      optionsObras={this.props.optionsObras}  
      component={renderItens} /> 
    ) 
    } 
} 

回答

0

我把它整理出来。

我在选择的onChange事件中传递FieldArray索引,并且在传递索引的状态下放置了一个数组。所以我可以用数组中的特定索引填充其他选择选项。

constructor(){ 
    super() 

    this.state = { 
     itensObra: [] 
    } 
    this.toggleItens = this.toggleItens.bind(this) 
} 
toggleItens(event, index) { 
    const itens = this.state.itensObra 
    this.props.optionsObras.map(obra => { 
     if (event.target.value === obra.nome) { 
      itens[index] = obra.itens 
      return this.setState({ 
       itensObra: itens 
      }) 
     } 
     return false 
    }) 
} 

这里是字段:

<td> 
    <Field name={`${item}.obra`} component={LabelAndSelect} 
     onChange={(event) => this.toggleItens(event, itemIndex)} 
     options={optionsObras.map((option, optionIndex) => { 
     return {value: `${option.nome === undefined?'':option.nome}`, 
       label:`${option.nome === undefined?'':option.nome}`} 
     } 
    )} /> 
</td> 
<td> 
    <Field name={`${item}.itemObra`} component={LabelAndSelect} 
     options={this.state.itensObra[itemIndex]? 
       this.state.itensObra[itemIndex].map((option, optionIndex) => { 
     return {value: `${option.descricao === undefined?'':option.descricao}`, 
       label: `${option.descricao === undefined?'':option.descricao}`} 
     } 
    ):[]} /> 
</td> 
相关问题