componentWillReceiveProps () не вызывается после goBack () - PullRequest
0 голосов
/ 25 апреля 2019

Привет, ребята, поэтому мне нужно сначала экраны чатов, а второй чат.

В первом у меня есть каналы чата, где я выбираю один, а затем я иду на второй экран, где я на самом делев чате.На втором экране я использую componentWillReceiveProps для подписок в GraphQL.Все работает нормально, пока я не использую this.props.navigation.goBack() и если я вернусь, сообщения будут отправлены, но componentWillReceiveProps больше никогда не вызывается.

componentWillReceiveProps(nextProps) {
    console.log('I am here')
    if (nextProps.data !== undefined && !nextProps.data.loading) {
      let { subscribeToMore } = this.props.data;
      subscribeToMore({
        document: MESSAGE_ADDED_SUBSCRIPTION,
        updateQuery: (previousResult, { subscriptionData }) => {
          if (!subscriptionData.data) {
            return previousResult;
          }

          const newMessage = subscriptionData.data.messageAdded;

          if (
            previousResult.getMessagesForThisChannel[0] === undefined ||
            previousResult.getMessagesForThisChannel[0].channel._id ===
              newMessage.channel._id
          ) {
            if (
              !previousResult.getMessagesForThisChannel.find(
                n => n._id === newMessage._id
              )
            ) {
              return {
                ...previousResult,
                getMessagesForThisChannel: [
                  { ...newMessage },
                  ...previousResult.getMessagesForThisChannel
                ]
              };
            }
          }

          return previousResult;
        },
        onError: err => console.log(err)
      });
    }
}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

Одним из способов является использование события willFocus по реакции на навигацию, вы можете прикрепить событие внутри вашего компонента в методе componentWillMount:

componentWillMount()
  this.props.navigation.addListener(
    'willFocus', () => {
      // do what ever you'd like here...
    }
  );
}

, тогда, когда ваш компонент снова фокусируется на экране, он будетдействовать так же, как вы ожидали от componentWillReceiveProps.

0 голосов
/ 25 апреля 2019

По какой-то причине this.props.navigation.goBack() по умолчанию не вызывает каких-либо изменений в вашем состоянии приращения, поэтому ваши реквизиты не обновляются.То, что вы можете сделать, это вызвать некоторую дополнительную логику (действие) рядом с вашей функцией, которая вызывает this.props.navigation.goBack(), чтобы уведомить избыточный код о том, что произошли изменения.Если у вас действительно нет изменений данных, просто создайте клон любого из ваших редукторов (используя карту, распространение и т. Д.) И верните его.Это должно освежить ваш реквизит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...