如何在React Native中使用两个选择器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在React Native中使用两个选择器?相关的知识,希望对你有一定的参考价值。

我有两个选择器在本地处理从API获取数据的反应,但是当我从另一个获取数据API添加另一个选择器时,EXPO APP崩溃。我试图更改dataSource的名称,但是仍然出现错误。这是我的代码,谢谢!。

  componentDidMount() 

    return fetch('http://address/api/AreaUnidades/obtenerAreas')
      .then((response) => response.json())
      .then((responseJson) => 
        this.setState(
          isLoading: false,
          dataSource: responseJson
        , function() 
          // In this block you can do something with new state.
        );
      )


      .catch((error) => 
        console.error(error);
      ); 

  


//SELECT CARS
  componentDidMount2() 

    return fetch('http://address/api/InventarioMarchamos/obtenerVehiculos/')
      .then((response) => response.json())
      .then((responseJson1) => 
        this.setState(
          isLoading: false,
          dataSource2: responseJson1
        , function() 
          // In this block you can do something with new state.
        );
      )
      .catch((error) => 
        console.error(error);
      ); 
  

选择器代码:

<Picker
  selectedValue=this.state.PickerValueHolder
   onValueChange=(itemValue, itemIndex) => this.setState(PickerValueHolder: itemValue) >
     this.state.dataSource.map((item, key)=>(
     <Picker.Item label=item.area value=item.id_area key=key STF = this.setFirstValue("1") />)
     )
</Picker>


<Picker
  selectedValue=this.state.PickerVehiculos
   onValueChange=(itemValue, itemIndex) => this.setState(PickerVehiculos: itemValue) >
     this.state.dataSource.map((item, key)=>(
     <Picker.Item label=item.Placa value=item.IdUnidad key=key  />)
     )
</Picker>
答案

[很难在没有完整组件的情况下告诉您,但是我想如果您有条件地基于此渲染,那么您也会遇到isLoading状态的问题。

下面的代码将两个fetch调用都放入componentDidMount中(无需在那里返回fetch的值),并为第二个数据源添加了一个附加的loading状态。最后,将第二个选择器连接到dataSource2

class TwoPickers extends React.Component 
  constructor(props) 
    super(props);
    this.state = 
      dataSource: [],
      dataSource2: [],
      isLoading: true,
      isLoading2: true,
    ;
  

  componentDidMount() 
    fetch('http://address/api/AreaUnidades/obtenerAreas')
      .then(response => response.json())
      .then(responseJson => 
        this.setState(
          
            isLoading: false,
            dataSource: responseJson,
          ,
          function() 
            // In this block you can do something with new state.
          
        );
      )

      .catch(error => 
        console.error(error);
      );
    fetch('http://address/api/InventarioMarchamos/obtenerVehiculos/')
      .then(response => response.json())
      .then(responseJson1 => 
        this.setState(
          
            isLoading2: false,
            dataSource2: responseJson1,
          ,
          function() 
            // In this block you can do something with new state.
          
        );
      )
      .catch(error => 
        console.error(error);
      );
  
  render() 
    const isLoading, isLoading2 = this.state;
    if (isLoading || isLoading2) 
      // your loading component
    
    return (
      <>
        <Picker
          selectedValue=this.state.PickerValueHolder
           onValueChange=(itemValue, itemIndex) => this.setState(PickerValueHolder: itemValue) >
             this.state.dataSource.map((item, key)=>(
             <Picker.Item label=item.area value=item.id_area key=key STF = this.setFirstValue("1") />)
             )
        </Picker>


        <Picker
          selectedValue=this.state.PickerVehiculos
           onValueChange=(itemValue, itemIndex) => this.setState(PickerVehiculos: itemValue) >
             this.state.dataSource.map((item, key)=>(
             <Picker.Item label=item.Placa value=item.IdUnidad key=key  />)
             )
        </Picker>
      </>
    );
  


以上是关于如何在React Native中使用两个选择器?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Formik 的 React-Native 选择器

如何在 react native 中使用选择器从 redux 状态设置 usestate 的初始值?

观点 | Flutter vs React Native,两个开源框架如何选?

React-native - 如何创建无限选择器

如何设置标准 react-native android 选择器的样式?

如何在 React Native 上进行选择?