【问题标题】:Select single row of Flatlist React native选择单行 Flatlist React native
【发布时间】:2018-12-12 11:40:36
【问题描述】:

嘿,伙计们,我正在制作一个自定义尺寸选择器,我想一次选择一个尺寸,但 onPress 所有项目都已更改..

我的 onPress 活动

onPressItemSize = (item,index:string) => {
  this.setState((item) => {
    const xl =
    xl == item ? this.setState({xl:true}) : this.setState({xl:false});
    return { xl };
  });
  this.setState({selectedSize:item.value})
};

这是我的平面列表组件

<FlatList
  data={this.state.label}
  numColumns={5}
  keyExtractor={(item, index) => index.toString()}
  extraData={this.state}
  renderItem={({item,index}) =>
    <View style={{padding:10,}}>
      <TouchableOpacity 
        onPress={this.onPressItemSize.bind(this, item,index)}
        style={[styles.Buttoncolor,this.state.xl?null:styles.onfocusbutton]}>
        <Text adjustsFontSizeToFit 
          textTransform='uppercase' 
          style={[styles.textcolor,this.state.xl?null:styles.white]}>
          {item.label}
        </Text>
      </TouchableOpacity>
    </View>
   }
/>

【问题讨论】:

    标签: reactjs react-native react-native-flatlist


    【解决方案1】:

    我不确定您要设置哪种状态,但您需要牢记调用setState 将触发异步函数,您需要等待新状态成功更改。我也会使用箭头函数在调用它们时不绑定函数。

    onPressItemSize = (item, index) => {
    
      const { xl } = this.state;  //what is xl ?? im assuming it is in your state
      const callback = () => {console.log("State changed");}
    
      var newXL = false;
    
      if(xl === item){
        newXL = true
      }
    
      //you can set diferents values at the same time
      this.setState({xl: newXL, selectedSize: item.value }, callback)
    
    };
    
    
    
    <FlatList
      data={this.state.label}
      numColumns={5}
      keyExtractor={(item, index) => index.toString()}
      extraData={this.state}
      renderItem={({item, index}) =>
        <View style={{padding:10,}}>
          <TouchableOpacity 
            onPress={() => onPressItemSize(item, index)}     //changed
            style={[styles.Buttoncolor,this.state.xl?null:styles.onfocusbutton]}>
            <Text adjustsFontSizeToFit 
              textTransform='uppercase' 
              style={[styles.textcolor,this.state.xl?null:styles.white]}>
              {item.label}
            </Text>
          </TouchableOpacity>
        </View>
       }
    />
    

    【讨论】:

    • 我猜 OP 想用 XL 状态(从特大?
    猜你喜欢
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2018-06-04
    • 1970-01-01
    相关资源
    最近更新 更多