Как заставить пользователя выйти из системы после обратного отсчета реагировать

#reactjs

#reactjs

Вопрос:

Я пытаюсь добиться выхода пользователя из системы после окончания обратного отсчета, извините, потому что я новичок в react, который все еще учится, в любом случае это мой код. Большое вам спасибо за вашу помощь, я действительно ценю это. Выдает ошибку с надписью TypeError: this.props.onLogout не является функцией 🙂

Мой код:

  import React, { Component } from 'react';
import Countdown from "react-countdown";
import {
  Redirect,
} from 'react-router-dom';
import { logoutUser } from '../../../actions/authActions';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';


export class OnlineOrders extends Component {
 
  onLogout = (e) => {
    e.preventDefault();
    this.props.logoutUser();
  };

  render() {
 
    
    const renderer = ({ days, hours, minutes, seconds, completed }) => {
      if (completed) {
        this.props.onLogout();
        return <>
          <Redirect to='/billing/plans' />
        
        </>;
      } else {
        return (
          <span>
            {days}:{hours}:{minutes}:{seconds}
          </span>
        );
      }
    };

    return (
      <>
          <div className='note primary'>
            You have <strong><Countdown date={Date.now()   5000} renderer={renderer} /></strong>  remaining on your free trial.
                <a href='/billing/plans'> Activate Now</a> to stay alive!
              </div>
      </>
    );
  };
}

OnlineOrders.propTypes = {
  logoutUser: PropTypes.func.isRequired,
  auth: PropTypes.object.isRequired,
};

const mapStateToProps = (state) => ({
  auth: state.auth,
});

export default connect(mapStateToProps, { logoutUser })(OnlineOrders);
 

Ответ №1:

Похоже, вам нужно правильно вызвать onLogout .

 if (completed) {
  this.onLogout();
  return <Redirect to='/billing/plans' />;
} else {
  return (
    <span>
      {days}:{hours}:{minutes}:{seconds}
    </span>
  );
}
 

Примечание: вы можете напрямую вызвать обратный вызов из props и сохранить объявление функции.

 if (completed) {
  this.props.logoutUser();
  return <Redirect to='/billing/plans' />;
} else {
  return (
    <span>
      {days}:{hours}:{minutes}:{seconds}
    </span>
  );
}
 

На самом else деле это тоже лишнее, его можно удалить.

 const renderer = ({ days, hours, minutes, seconds, completed }) => {
  if (completed) {
    this.props.logoutUser();
    return <Redirect to='/billing/plans' />;
  }
  return (
    <span>
      {days}:{hours}:{minutes}:{seconds}
    </span>
  );
};
 

Комментарии:

1. Привет, спасибо за ответ, но в нем говорится, что this.props.logoutUser не является функцией @Drew Reese

2. @AlifKhan this.props.logoutUser(); был взят код непосредственно из вашего фрагмента. Эта ошибка означает либо (1), что буквально this.props.logoutUser(); не является функцией, т. Е. Это что-то другое, что не является функцией и не может быть вызвано как таковое, либо (2), что this.props.logoutUser(); не определено, поскольку оно не было передано OnlineOrders компоненту в качестве prop. Если вы используете this.onLogout(); , сохраняется ли та же проблема?

3. извините, по моей ошибке забыл импортировать import { logoutUser} из ‘../../../actions / authActions’;

4. когда я использую this.onLogout(); у него та же ошибка @Drew Reese

5. @AlifKhan с помощью redux? Ваш logoutUser завернутый в вызов dispatch ? Подключен ли ваш компонент к вашему хранилищу redux? Если вы можете обновить свой вопрос, чтобы включить весь код компонента, я могу помочь в дальнейшем.