React Native - 如何从父级获取 FlatList 项的值

Posted

技术标签:

【中文标题】React Native - 如何从父级获取 FlatList 项的值【英文标题】:React Native - How to get the values of FlatList Items from Parent 【发布时间】:2021-04-16 14:33:16 【问题描述】:

我正在使用已呈现项目的平面列表。平面列表中的每个项目都是一个自定义组件,具有一个包含整数值的状态。在平面列表下方,我有一个按钮,单击它必须打印项目中状态变量的值。我正在尝试使用“useRef”数组。我无法访问平面列表的项目。我缺少一些东西来处理它。

这是我的参考代码:

//Custom Component
export const SelectionOptions = (props: any) => 
    const 
        title = '',
        options = [],
        selected = [],
        allowSingleSelection = true,
     = props;

    const [selectedItems, setSelectedItems] = useState(selected);

  
    return (
    <View>
    .
    .
    .
    .
    </View>
            )



//Parent
const OnBoardingScreen = () => 

    const flatList = createRef<FlatList<any>>();
    const [currentDisplayingPage, setCurrentDisplayingPage] = useState(0);
    const [selectedTab, setSelectedTab] = useState(0);
    const itemEls = useRef(new Array())

    const [data, setData] = useState([
        
            id: 1,
            value: 
                title: 'Age Group',
                options: [
                     id: 1, value:  left: 'A', right: '18-30'  ,
                     id: 2, value:  left: 'B', right: '31-45'  ,
                     id: 3, value:  left: 'C', right: '45-64'  ,
                     id: 4, value:  left: 'D', right: '65+'  ,
                ],
                singleSelection: true
            
        ,
    ]);

    const renderItem = (item) => 
        return (
            <SelectionOptions
                title=item.value.title
                options=item.value.options
                allowSingleSelection=item.value.singleSelection
                ref=(element) =>  itemsEls[item.id] = element; 
            />
        );
    ;

    return (
        <Container style=styles.container>
                
            <FlatList
                scrollEnabled=false
                style= width: 300 
                horizontal
                pagingEnabled
                showsHorizontalScrollIndicator=false
                data=data
                renderItem=(item) => renderItem(item.item)
                ref=flatList
            />
            <Button onPress=() = 
                for item in each itemsEls 
                    console.log(item.current.selectedItems);
                
             title=“Click Me”/>
            />
        </Container >
    );



export default OnBoardingScreen;

【问题讨论】:

itemsEls[item.id]你的意思是itemsEls[item.item.id]吗?我建议你在 renderItem 中解构 item:const renderItem = ( item ) =&gt; ... 避免每次都出现多余的 item.item @Milore 感谢关于解构的建议。我更新了我的代码。你现在可以检查并告诉我处理 flatlist 中的 refs 的方法吗? 【参考方案1】:

import React from 'react';
import 
  FlatList,
  Text,
  View,
 from 'react-native';

const Home = () => 
    Data = [
        
            id : 1,
            email : 'abc@gmail.com',
            first_name : 'abc',
        ,
        
          id : 2,
          email : 'xyz@gmail.com',
          first_name : 'xyz',
      ,
         
          id : 3,
          email : 'pqr@gmail.com',
          first_name : 'pqr',
       ,
        
          id : 4,
          email : 'mno@gmail.com',
          first_name : 'mno',
      ,
         
          id : 5,
          email : 'rst@gmail.com',
          first_name : 'rst',
      
    ]
  const renderDataList = (item) => 
    return (
      <>
        <View style=marginLeft: '10%'>
          <Text style=color: 'red'> item.email</Text>
          <Text> item.first_name</Text>
        </View>
        <View
          style=
            borderColor: 'black',
            borderBottomWidth: 2,
          ></View>
      </>
    );
  ;

  return (
    <>
      <SafeAreaView> 
        <FlatList 
            data=Data 
            renderItem=renderDataList 
            keyExtractor=item=>item.id 
        />
      </SafeAreaView>
    </>
  );
;

export default Home;

【讨论】:

以上是关于React Native - 如何从父级获取 FlatList 项的值的主要内容,如果未能解决你的问题,请参考以下文章

如何从父级获取数据到子级?

如何使用Vue从父级中的多个子组件中获取值?

核心数据从父级获取 GrandChild

如何从父级及其子级的 Firebase 中获取随机数据 [重复]

在 React-Router 中将状态作为道具从父级传递给子级?

在 useEffect() 钩子中从父级传递的子级调用函数,React