Рубрики
Без рубрики

Использование компонентов более высокого порядка для аутентифицированного маршрутизации

Компонент более высокого порядка (HOC) (https://reactjss.org/docs/higher-orders-components.html) – это просто реактивный компонент, который обернутся еще один. React-redux Connect (MapstateTOronops, …

Автор оригинала: Sahil Mittal.

А Компонент более высокого порядка (HOC) это просто реактивный компонент, который обернутся еще один.

Реагистрационный redux Connect (MapStatetoProps, mapdispatstonops) (компонент) Узор является примером использования Подключиться () HOC расширить реактивный компонент такой, что его Это .props На самом деле подключается к значениям и действиям в магазине Redux.

Допустим, у нас есть некоторые страницы, которые мы хотим только аутентифицированным пользователям просматривать его (очень распространенное использование); Мы можем использовать HOC здесь, чтобы справиться с этим!

Давайте определим нашу требует HOC; Предполагая, что мы используем магазин Redux для хранения auth Состояние пользователя:

./components/requiresauth.js.

import React, { PropTypes } from 'react';  
import { connect } from 'react-redux';  
import { push } from 'react-router-redux';

export default function (ComposedComponent) {  
  class Authenticate extends React.Component {
    static propTypes = {
      isAuthenticated: PropTypes.boolean,
      redirect: PropTypes.func.isRequired
    };

    componentDidMount() {
      this._checkAndRedirect();
    }

    componentDidUpdate() {
      this._checkAndRedirect();
    }

    _checkAndRedirect() {
      const { isAuthenticated, redirect } = this.props;

      if (!isAuthenticated) {
        redirect();
      }
    }

    render() {
      return (
        
{ this.props.isAuthenticated ? : null }
); } } const mapStateToProps = (state) => { return { isAuthenticated: state.auth.isAuthenticated }; }; const mapDispatchToProps = dispatch => bindActionCreators({ redirect: () => push('/signin') }, dispatch) Authenticate.propTypes = propTypes return connect( mapStateToProps, mapDispatchToProps )(Authenticate); }

Итак, требует это функция, которая берет Сопирован Компонент и возвращает Аутентифицированный коммуникация Отказ Аутентифицированный коммуникация Обертывает оригинальный компонент, плюс он проверяет, если пользователь уже аутентифицирован, если он не будет, он будет перенаправлен на /Регистрация Отказ Довольно простой эх?

Теперь мы можем использовать требуемый HOC и обновлять наш компонент, где мы определили маршруты:

./components/route.js.

...
import requireAuth from './requiresAuth';
...
const routes = (  
  
    
    ...
    
      
      
    
    ...
  
);