Как я могу вызвать функцию после установки экрана? - PullRequest
3 голосов
/ 30 апреля 2020

На главном экране у меня есть функция, которая получает «тип пользователя: Paid / UnPaid» из API,

Так что на этом экране у меня есть ящик, внутри которого пользователь может перемещаться для входа после входа в систему я перехожу к нему обратно на главный экран

, но в этом случае главный экран уже подключен, то есть функция userIsPaid уже вызывается в первый раз, поэтому я хочу перепроверить, если это учетная запись платная или нет снова "вызвать userisPaid ()"?

, потому что в нижней вкладке я отображаю новую вкладку условно на основе типа пользователя, и она не работает, потому что я не перепроверяю тип пользователя.

Код

Root. js

const BottomTabStack = createBottomTabNavigator();
function BottomTabs() {
  const isPaid = useSelector(state => state.userIsPaid.isPaid);

...
 <BottomTabStack.Navigator
      lazy={false}
      tabBar={props => <TabBar {...props} />}
      >
...
 {isPaid && (
        <BottomTabStack.Screen
          name="Library"
          component={YourLibraryStackScreen}
        />
      )}
    </BottomTabStack.Navigator>
}

Дом. js

  userIsPaid = async () => {
    try {
      const {token} = this.props;
      let AuthStr = `Bearer ${token}`;
      let response = await API.get('/profile', {
        headers: {Authorization: AuthStr},
      });
      const {account} = response.data.data;
      console.log('account??', account);
      account === 'unpaid'
        ? this.props.isUserPaid(false)
        : this.props.isUserPaid(true);
    } catch (err) {
      console.log(err);
    }
  };

componentDidMount() {
    const {token} = this.props;
    token && this.userIsPaid();
 }

Вход. js

  sendData = async data => {
    // this.setState({loading: true});
    try {
      let response = await API.post('/google', data);
      // this.setState({loading: false});
      let {
        data: {
          data: {
            response: {token},
          },
        },
      } = response;

      this.props.dispatch(saveToken(token));
      this.props.dispatch(isLoginFunc(true));
      this.props.navigation.push('BottomTabNavigator'); // bottom navigation 'home,about....'
    } catch (err) {
      console.log(err);
    }
  };

1 Ответ

0 голосов
/ 30 апреля 2020

Использование shouldComponentUpdate() метода жизненного цикла mybe полезно. Используйте shouldComponentUpdate(), чтобы сообщить React, если на выход компонента не влияет текущее изменение в состоянии или реквизитах . Поведение по умолчанию заключается в повторном рендеринге при каждом изменении состояния , и в подавляющем большинстве случаев вы должны полагаться на поведение по умолчанию.

shouldComponentUpdate() вызывается перед рендерингом, когда новый реквизиты или состояние принимаются. По умолчанию true. Этот метод не вызывается для начального рендеринга или когда используется forceUpdate().

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