如何确定 React Native Gifted Chat 中的消息呈现顺序?

How to determine the message rendering order in React Native Gifted Chat?

我想知道如何确定消息呈现顺序?

起初我以为它会使用createdAt Date对象来确定渲染,但它没有。

(如您所见,它不会根据日期呈现(首先是 2019 年,然后是 2018 年、2017 年、2016 年,然后再次是 2019 年)

我想知道如何才能确定首先显示最新消息的顺序。 我的初始消息数组如下所示:

const [messages, setMessages] = useState([
    {
      _id: 'gdfsdfasdfasdfasdfas',
      text: 'Test Test 2',
      createdAt: new Date(Date.UTC(2016, 5, 11, 17, 20, 1)),
      user: {
        _id: 2,
        name: 'React Native',
        avatar: 'https://placeimg.com/140/140/any',
      },
    },
    {
      _id: 'aereraesaresraesraes',
      text: 'Test Test',
      createdAt: new Date(Date.UTC(2017, 5, 11, 17, 20, 1)),
      user: {
        _id: 2,
        name: 'React Native',
        avatar: 'https://placeimg.com/140/140/any',
      },
    },
    {
      _id: 'dasfadsfdfasfadasdasd',
      text: 'What\'s up ;)',
      createdAt: new Date(Date.UTC(2018, 5, 11, 17, 20, 1)),
      user: {
        _id: 2,
        name: 'React Native',
        avatar: 'https://placeimg.com/140/140/any',
      },
    },
    {
      _id: 'dasdasfdasfdasf',
      text: 'Hello developer',
      createdAt: new Date(Date.UTC(2019, 5, 11, 17, 20, 1)),
      user: {
        _id: 'ewrqqewrewrqrqewrewq',
        name: 'React Native',
        avatar: 'https://placeimg.com/140/140/any',
      },
    },
  ]);

这个问题对我来说也很痛苦。我终于成功了。因为您已经有了 createdAt 新的 JS 日期格式,所以您只需要对数组进行排序。 react-native-gifted-chat 默认情况下不这样做。因此,在设置状态之前,请使用以下排序方法以正确的结构呈现聊天。

data.sort((a, b) => b.createdAt - a.createdAt)

您可以根据时间戳对对象进行排序并使用 flex-direction: column-reverse。这是为了处理聊天框出现新消息时滚动会自动聚焦在底部的情况。

排序: data.sort((a, b) => b.createdAt - a.createdAt) 因为我们反向渲染项目。

保持滚动:

display: flex;
flex-direction: reverse