【问题标题】:How can I set data in a state in FlatList?如何在 FlatList 中设置状态数据?
【发布时间】:2019-04-26 19:35:52
【问题描述】:

我想将产品 ID (item.id) 保存为 productId 这样的状态。

我需要产品 ID 才能将产品添加到购物车。

当我点击 TouchableOpacity 工作正常但 productId 始终为 4 时。

我有三个项目。最后一项的id 是 4,第一项是 2。

当我点击产品 1 的 TouchableOpacity 时,id 是 4 但应该是 2。

当我在 listView 中打印 ID 时,我看到 ID 正常。

  <FlatList
     data={this.state.dataSource}
     renderItem={({item}) =>

     <View>
     <View>

     <Text>{item.title} - {item.type}</Text>
     <Text>{item.id}</Text>

     <TouchableOpacity onPress={this.decrementCount,()=>this.setState({productId:item.id})}>

     <AntDesign name="minus" size={15} style={{color:'#fff'}}/>

     </TouchableOpacity>


     <TouchableOpacity onPress={this.incrementCount} activeOpacity={0.5}>
     <AntDesign name="plus" size={15} style={{color:'#fff'}}/>

     </TouchableOpacity>

     </View>
     </View>

     }
     />

【问题讨论】:

    标签: react-native react-native-flatlist


    【解决方案1】:

    我认为这行是你的问题:

    <TouchableOpacity onPress={this.decrementCount,()=>this.setState({productId:item.id})}>
    

    首先,你应该在你的类上定义你的渲染函数,并且你应该定义你的 onPress 函数。例如:

    class MyClass extends React.Component {
    
      handlePress = (item) => {
        this.decrementCount()
        this.setState({productId: item.id})
      }
    
      renderItem = ({item, index}) => {
        return (...code from above, but using this.handlePress rather than your onPress function as currently defined)
      }
    
      render() {
        return (
          <FlatList
            data={this.state.dataSource}
            renderItem={this.renderItem}
          />
        )
      }
    }
    

    我认为它现在不适合你的真正原因是你试图在你的 onPress 函数中调用 this.setState 作为回调。如果您将当前的 onPress 从以下位置更改,它可能会按原样工作: onPress={this.decrementCount,()=&gt;this.setState({productId:item.id})}onPress={() =&gt; this.setState({productId:item.id}, this.decrementCount)} 因为我很确定你可以从 this.setState 中调用一个回调函数。

    希望这会有所帮助!

    【讨论】:

    • 您也可以一次性完成两种状态更改:this.setState(prevState =&gt; ({productId: item.id, count: prevState.count - 1}))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2021-02-08
    • 2019-04-23
    • 2021-02-12
    • 1970-01-01
    相关资源
    最近更新 更多