如何更新FlatList项目的属性?

埃里萨尔

我已经编写了一个Android应用程序,它由TextInput,Button和FlatList组成。使用在TextInput中写入的每个名称,在平面列表中将有一个项目。Item标题将是TextInput内容,并且在列表项旁边将有两个按钮和一个文本。一个按钮用于将“文本”显示的数字增加1,另一个按钮用于减小。这是我的代码:

import React, {Component} from 'react';
import {
  View,
  Text,
  TextInput,
  FlatList,
  TouchableOpacity,

} from 'react-native';
import { ListItem, SearchBar} from 'react-native-elements';


class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      task: "",
      task_array: [],


    };
  }

  ChangeText = (some_task) => {
    this.setState({task: some_task});
  };
  pushAdd = () => {
    let contact = {
      name: this.state.task,
      counter: 0,
    };
    this.setState({task_array: [...this.state.task_array, contact]});
  };








  renderListItem = ({item}) => {
   return(
     <View style={{flexDirection: 'row'}}>
     <ListItem title={item.name} style={{width:'75%', marginLeft:20}}></ListItem>
     <View style={{flexDirection:'row'}}>
         <TouchableOpacity style={{ backgroundColor: 'blueviolet', height: 20, width: 20, borderRadius: 50}} onPress={()=> item={name:item.name, counter:item.counter + 1}}><Text>+</Text></TouchableOpacity>
         <Text>{item.counter}</Text>
  //main problem       <TouchableOpacity style={{ backgroundColor: 'blueviolet', height: 20, width: 20, borderRadius: 50 }} onPress={() => item = { name: item.name, counter: item.counter - 1 }}><Text>-</Text></TouchableOpacity>

     </View>

     </View>

   );
  };


render() {
  return(
    <View style={{ backgroundColor: 'mediumturquoise', width:'100%', height:'100%'}}>
    <FlatList 
      data = {this.state.task_array}
      renderItem = {this.renderListItem}
      keyExtractor = {(item) => item.name}>
    </FlatList>
    <View style = {{flexDirection : 'row', alignContent:'center', alignItems:'center'}}>
        <TextInput onChangeText={this.ChangeText} style={{ backgroundColor: 'burlywood', height:50, width:'75%', borderRadius:30, marginBottom:20, marginLeft:20, marginRight:20}}></TextInput>
        <TouchableOpacity style={{ backgroundColor: 'chocolate', height:40, width:50, borderRadius:10, marginBottom:20}} onPress={this.pushAdd}></TouchableOpacity>
    </View>
    </View>
  );
  }
};

export default App;

我已经指出了有问题的路线,并带有“主要问题”这一评论。增大和减小按钮不起作用,当我在应用程序中按它们时,文本中的数字保持不变。我应该对我的增加和减少按钮的onPress方法执行什么更改才能使它们起作用?

最高

在React中,您不能直接操作数据(就像在onPress方法中的+/-按钮中一样)。这将无效,相反,您需要使用setState

最快的解决办法是改变

// this
renderListItem = ({item}) => {
// to this
renderListItem = ({item, index}) => {

知道渲染项目的索引。然后,更改onPress这些项目中您的递增/递减按钮方法以setState代替

// from this
onPress={()=> item={name:item.name, counter:item.counter + 1}}
// to this
onPress={() =>
          this.setState({
            task_array: this.state.task_array
              .map((item, itemIndex) =>
                itemIndex !== index
                  ? item
                  : {
                    ...item,
                    counter: item.counter + 1
                  })
          })}

这里发生的是,我们使用array的.map()方法从旧的数组中创建了一个新的task_array,除了单击的一个元素(我们通过比较索引定义)之外,其他所有元素都保持不变。在这种情况下,我们增加它的计数器,并通过使用将新值分配给task_arraythis.setState

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用CakePHP更新表中项目的单个属性

来自分类Dev

如何在选择或单击列表中的单个项目时更新 FlatList 中所有项目的 UI 设计

来自分类Dev

如何实现从FlatList删除项目的方法?

来自分类Dev

如何使用索引设置项目的属性?

来自分类Dev

如何轮询列表中项目的更新?

来自分类Dev

如何获取Wikidata项目的所有属性值的标签?

来自分类Dev

ListViewItem的控件模板-如何访问项目的属性

来自分类Dev

如果查询项目的多个属性,如何制作XSLT

来自分类Dev

如何修改模型中特定项目的属性

来自分类Dev

如何在ObservableList中观察项目的属性更改

来自分类Dev

如何重复循环由项目的属性确定的集合的子集?

来自分类Dev

如何根据行项目的属性设置 TableCell 的样式?

来自分类Dev

如何通过REST API更新多个项目的顺序?

来自分类Dev

如何通过API更新曲目的流属性?

来自分类Dev

如何为用作DataGrid的ItemsSource的项目的collection属性中的每个项目生成和绑定列

来自分类Dev

WPF / C#将ObservableCollection中的项目的属性更改更新到ListBox

来自分类Dev

WPF / C#将ObservableCollection中的项目的属性更改更新到ListBox

来自分类Dev

如果数据更新,如何更新 FlatList

来自分类Dev

如何在更改项目属性时进行 ObservableCollection 更新

来自分类Dev

如何从 FlatList 中的存储中删除项目?

来自分类Dev

如何设置项目的版本?

来自分类Dev

如何实现项目的总和

来自分类Dev

如何获取项目的总数?

来自分类Dev

无法加载项目的属性文件

来自分类Dev

当前项目的CSS内容属性

来自分类Dev

数组中项目的jQuery Grab属性

来自分类Dev

访问IEnumerable中包含的项目的属性

来自分类Dev

访问IEnumerable中包含的项目的属性

来自分类Dev

当前项目的CSS内容属性

Related 相关文章

  1. 1

    如何使用CakePHP更新表中项目的单个属性

  2. 2

    如何在选择或单击列表中的单个项目时更新 FlatList 中所有项目的 UI 设计

  3. 3

    如何实现从FlatList删除项目的方法?

  4. 4

    如何使用索引设置项目的属性?

  5. 5

    如何轮询列表中项目的更新?

  6. 6

    如何获取Wikidata项目的所有属性值的标签?

  7. 7

    ListViewItem的控件模板-如何访问项目的属性

  8. 8

    如果查询项目的多个属性,如何制作XSLT

  9. 9

    如何修改模型中特定项目的属性

  10. 10

    如何在ObservableList中观察项目的属性更改

  11. 11

    如何重复循环由项目的属性确定的集合的子集?

  12. 12

    如何根据行项目的属性设置 TableCell 的样式?

  13. 13

    如何通过REST API更新多个项目的顺序?

  14. 14

    如何通过API更新曲目的流属性?

  15. 15

    如何为用作DataGrid的ItemsSource的项目的collection属性中的每个项目生成和绑定列

  16. 16

    WPF / C#将ObservableCollection中的项目的属性更改更新到ListBox

  17. 17

    WPF / C#将ObservableCollection中的项目的属性更改更新到ListBox

  18. 18

    如果数据更新,如何更新 FlatList

  19. 19

    如何在更改项目属性时进行 ObservableCollection 更新

  20. 20

    如何从 FlatList 中的存储中删除项目?

  21. 21

    如何设置项目的版本?

  22. 22

    如何实现项目的总和

  23. 23

    如何获取项目的总数?

  24. 24

    无法加载项目的属性文件

  25. 25

    当前项目的CSS内容属性

  26. 26

    数组中项目的jQuery Grab属性

  27. 27

    访问IEnumerable中包含的项目的属性

  28. 28

    访问IEnumerable中包含的项目的属性

  29. 29

    当前项目的CSS内容属性

热门标签

归档