如何在 React Native 中动态创建多个 Refs

Posted

技术标签:

【中文标题】如何在 React Native 中动态创建多个 Refs【英文标题】:How to create multiple Refs dynamically in React Native 【发布时间】:2021-05-09 15:35:28 【问题描述】:

我的 React Native 应用程序中有多个 Swipeable 组件,它们是由用户动态创建的,为了让 Swipeable 自行关闭,我设置了对它的引用,并在其上调用了一个关闭函数,但是,这仅适用于最后创建的 Swipeable,而不适用于所有这些,我怎样才能使 ref 适用于所有这些?

这是我的代码:

const [messages, setMessages] = useState([])
const Swipeablee = useRef();

     return(
 messages.map((id, data) => (
 <Swipeable key=id renderLeftActions=leftActions
                onSwipeableLeftOpen=() => swipeAction(data)
                overshootLeft=false
                ref=Swipeablee
                overshootFriction=8 >
)
)

这是我正在调用的函数:

const swipeAction = (data) => 

        Swipeablee.current.close()
  

【问题讨论】:

您需要分享更多代码。您如何存储 Swipeables,id 是什么?当你插入新的 Swipeable 时,你也可以创建一个 ref 并以同样的方式存储它 @Sohaib 感谢您的评论,我已经编辑了代码,如您所见,我正在映射一组消息,并且每个消息都返回一个 Swipeable,它具有来自 firebase 的自己的 id。 仍然不清楚你如何称呼setMessages 【参考方案1】:

您可以这样做。使用 useRef 创建一个数组,并在 Swipeable 组件渲染后将 ref 存储在其中。

const [messages, setMessages] = useState([]);
const refs = useRef([]); // using useRef because we want to persist the values when component re-renders

const swipeAction = (data, swipeable) => 
  // process data
  swipeable.close()



return(
   messages.map((id, data, index) => (
      <Swipeable key=id renderLeftActions=leftActions
            onSwipeableLeftOpen=() => swipeAction(data, refs.current[index])
            overshootLeft=false

            // Store the Swipeable to our array, ref prop will give us the component once it is rendered
            ref=swipeable => refs.current[index] = swipeable

            overshootFriction=8 />
    )
)

【讨论】:

但是索引从何而来?我必须分配它吗? 索引来自map函数。你不必分配它

以上是关于如何在 React Native 中动态创建多个 Refs的主要内容,如果未能解决你的问题,请参考以下文章

如何在React Native上创建多个屏幕?

React-Native:如何创建多个 Native UI 组件的实例?

react-native-maps :如何在放大和缩小时获取动态 latitudeDelta 和 longitudeDelta 值

如何使用 socket.io、react native、nodejs 管理聊天应用程序的多个套接字连接

如何使用“react-native-html-to-pdf”包动态设置 PDF 高度?

如何在 react-native 中动态加载模块?