React native 如何使用函数更改平面列表的数据?

React native 如何使用函数更改平面列表的数据?,react-native,function,react-native-flatlist,React Native,Function,React Native Flatlist,我有一个数组,其中包含在flatlist中表示的字典。每当我触摸一个组件时,我都希望执行一个函数来更改某些字典的数据。例如: const data = [ { duration: null, uri: null, step: 0, index: 0 } { duration: null, uri: null, step: 0, index: 1 } { duration: null, uri: null, step: 0, index: 2 } { duratio

我有一个数组,其中包含在flatlist中表示的字典。每当我触摸一个组件时,我都希望执行一个函数来更改某些字典的数据。例如:

const data = [
    { duration: null, uri: null, step: 0, index: 0 }
    { duration: null, uri: null, step: 0, index: 1 }
    { duration: null, uri: null, step: 0, index: 2 }
    { duration: null, uri: null, step: 0, index: 3 }
]

const updataData = (duration, uri) => {
    duration = 1000;
    uri = 'jsdbbsljv_sjk_jka'
}

return (
    <View>
        <FlatList
            data={data}
            renderItem={itemData => (
                <View>
                    <TouchableOpacity onPress={() => { updataData(itemData.item.duration, itemData.item.uri); itemData.item.step = itemData.item.step + 1 }} >
                    </TouchableOpacity>
                </View>
            )}
        />
    </View>
    )
const数据=[
{持续时间:null,uri:null,步骤:0,索引:0}
{持续时间:null,uri:null,步骤:0,索引:1}
{持续时间:null,uri:null,步骤:0,索引:2}
{持续时间:null,uri:null,步骤:0,索引:3}
]
const updateadata=(持续时间,uri)=>{
持续时间=1000;
uri='jsdbbsljv_sjk_jka'
}
返回(
(
{updateadata(itemData.item.duration,itemData.item.uri);itemData.item.step=itemData.item.step+1}>
)}
/>
)

这不是我正在使用的代码,但我需要学习的是在平面列表的renderItem之外的函数上更改itemData.item值。我如何才能做到这一点?

通过将数据存储在我们可以动态更改的状态

我们只需在props中传递项目的索引,并更新特定索引上的数据状态

例如

import React, { useState } from "react";
import { View, Text, FlatList, TouchableOpacity } from "react-native";

const App = () => {
  const [data, setData] = useState([
    { duration: null, uri: null, step: 0, index: 0 },
    { duration: null, uri: null, step: 0, index: 1 },
    { duration: null, uri: null, step: 0, index: 2 },
    { duration: null, uri: null, step: 0, index: 3 }
  ]);

  const updataData = (index, duration, uri) => {
    setData((prevData) => {
      return prevData.map((item) => {
        if (item.index === index) {
          return {
            ...item,
            duration: 1000,
            uri: "jsdbbsljv_sjk_jka"
          };
        }
        return {
          ...item
        };
      });
    });
  };

  return (
    <View>
      <FlatList
        data={data}
        renderItem={(itemData) => (
          <View>
            <TouchableOpacity
              onPress={() => {
                updataData(
                  itemData.item.index,
                  itemData.item.duration,
                  itemData.item.uri
                );
                itemData.item.step = itemData.item.step + 1;
              }}
            >
              <Text>{itemData.item.duration || itemData.item.index}</Text>
            </TouchableOpacity>
          </View>
        )}
      />
    </View>
  );
};

export default App;
import React,{useState}来自“React”;
从“react native”导入{视图、文本、平面列表、TouchableOpacity};
常量应用=()=>{
const[data,setData]=useState([
{持续时间:null,uri:null,步骤:0,索引:0},
{持续时间:null,uri:null,步骤:0,索引:1},
{duration:null,uri:null,步骤:0,索引:2},
{持续时间:null,uri:null,步骤:0,索引:3}
]);
const updateadata=(索引、持续时间、uri)=>{
setData((prevData)=>{
返回prevData.map((项)=>{
如果(item.index==索引){
返回{
…项目,
持续时间:1000,
uri:“jsdbbsljv_sjk_jka”
};
}
返回{
…项目
};
});
});
};
返回(
(
{
更新数据(
itemData.item.index,
itemData.item.duration,
itemData.item.uri
);
itemData.item.step=itemData.item.step+1;
}}
>
{itemData.item.duration | | itemData.item.index}
)}
/>
);
};
导出默认应用程序;

您应该使用状态来实现这一点(或其他状态管理流;如redux) 使用国家:

const initialData=[
{持续时间:null,uri:null,步骤:0,索引:0}
{持续时间:null,uri:null,步骤:0,索引:1}
{持续时间:null,uri:null,步骤:0,索引:2}
{持续时间:null,uri:null,步骤:0,索引:3}
]
const[data,setData]=useState(initialData)
const updateadata=(持续时间,uri)=>{
持续时间=1000;
uri='jsdbbsljv_sjk_jka'
}
const updateItem=(项目、索引)=>{
const updatedUri=“这里有些东西”
数据[索引]={
…项目,
uri:updatedUri
}
setData(数据)
}
常量renderItem=({item,index})=>{
返回(
updateItem(项,索引)}
>
)
}
返回(
)