当同一个按钮位于不同的屏幕上时,如何为同一个按钮赋予两个不同的功能?

How to give two different function to the same button when it's located on different screen?

第 1 页

我的 FlatList 如下所示。

    <FlatList
      ref={flatListRef}
      contentContainerStyle={{
        paddingBottom: 20,
      }}
      keyboardDismissMode={true}
      showsVerticalScrollIndicator={false}
      data={state}
      keyExtractor={(comment) => "" + comment.id}
      renderItem={renderComment}
    />

rendercomment 如下所示。 如您所见,它会转到带有数据的 CommentRow 屏幕。

  const renderComment = ({ item: commentsRow }) => {
    const { comments } = getValues();
    return (
      <CommentRow
        commentsRow={commentsRow}
        photoId={route?.params?.photoId}
        updatedComments={comments}
        textRef={textRef}
      />
    );
  };

当我按下 confirm 按钮时,它可以 create 评论。

    <ConfirmButton onPress={handleSubmit(onValid)}>
      <ConfirmText>확인</ConfirmText>

第 2 页

如果我们转到 CommentRow 屏幕。 如果我按编辑按钮,我想编辑我的评论。

      <TouchableOpacity onPress={onEditClick}>
        <WriteComment>수정</WriteComment>

但问题是当我按下 edit 按钮时,我需要使用 Comment 的确认按钮更改评论的有效负载。 因此,当我按下确认按钮时,它不会 edit 评论,而是 create 评论。

如果这些组件在一页中,那么我可以使用 useState 来区分编辑按钮和确认按钮。 但由于它们分别在两个屏幕中,我无法发送这是编辑按钮的信息 from page 2 to page 1。 因为 flatlist 只传递数据 from page 1 to page 2.

我已经为这个问题苦苦挣扎了 1 周 :( 你有什么想法吗?

您可以将回调函数从页面 1 传递到页面 2,如下所示。

 const onUpdateComment = React.useCallback((newComment) => {
    // update state here for setting the new comment
 }, [whatever you need here])

 const renderComment = ({ item: commentsRow }) => {
    const { comments } = getValues();
    return (
      <CommentRow
        commentsRow={commentsRow}
        photoId={route?.params?.photoId}
        comments={comments}
        updateComments={onUpdateComment} // this has changed on page 1
        textRef={textRef}
      />
    );
  };

在第 2 页,您可以使用传递的回调函数。

const onEditClick = React.useCallback(() => {
  // do the other stuff
  updateComments(newComment) // this is the callback function passed in the updateComments prop of CommentRow in page 1
}, [whatever you need here])
<TouchableOpacity onPress={onEditClick}>