Проверка подлинности пользователя Redux с шаблоном контейнера - PullRequest
0 голосов
/ 19 февраля 2019

Я работал с Redux за последний месяц и добился успеха по большинству фундаментальных тем (действия / редукторы, шаблон уток, маршрутизация и т. Д.).Мне также удалось создать приложение PERN, которое обрабатывает аутентификацию пользователей и доступ на основе ролей для маршрутизации.

С учетом вышесказанного я начал пытаться реализовать шаблон «Контейнер» для улучшения читаемости и возможности повторного использования моих компонентов.Я понимаю, что компоненты представления не имеют состояния и передают им данные и функции через реквизиты.Кроме того, эти компоненты контейнера отвечают за извлечение данных из хранилища, передачу данных и функций в компоненты представления через реквизиты и диспетчеризацию.

пример контейнера

import React from "react";
import { connect } from "react-redux";
import Counter from "../components/Counter";
import {
  counterActions,
  counterSelectors
} from "../../state/ducks/counter";


const CounterContainer = (props) => {

    return(
      <Counter
        counter={props.counter}
        onIncrement={props.onIncrement}
        onDecrement={props.onDecrement}
        onIncrementAsync={props.onIncrementAsync}/>
    );

};

function mapStateToProps(state){
  return {
    counter: counterSelectors.getCounter(state)
  }
}
//onIncrement, onDecrement, onIncrementAsync
function mapDispatchToProps(dispatch) {
  return {
    onIncrement: () => dispatch(counterActions.incrementCounter()),
    onDecrement: () => dispatch(counterActions.decrementCounter()),
    onIncrementAsync: () => dispatch(counterActions.incrementCounterAsync())
  }
}

export default connect( mapStateToProps, mapDispatchToProps )( CounterContainer );

пример представления

import React from 'react';
import PropTypes from 'prop-types';

const Counter = ({ counter, onIncrement, onDecrement, onIncrementAsync }) =>
  <div>
    <button onClick={onIncrementAsync}>
      Increment after 1 second
    </button>
    {' '}
    <button onClick={onIncrement}>
      Increment
    </button>
    <button onClick={onDecrement}>
      Decrement
    </button>
    <hr />
    <div>
      Clicked: {counter} times
    </div>
  </div>;

Counter.propTypes = {
  counter: PropTypes.number.isRequired,
  onIncrement: PropTypes.func.isRequired,
  onDecrement: PropTypes.func.isRequired
};

export default Counter

В моем приложении для аутентификации у меня был компонент с состоянием, который обрабатывал аутентификацию посредством использования избыточного thunk для отправки loginAction с полями из компонента.Однако я использовал ловушки жизненного цикла componentDidMount() и componentWillReceiveProps().

Как лучше всего реализовать аутентификацию пользователей, следуя шаблону контейнера в Redux?Для справки, я уже переключился с redux-thunk на redux-sagas, так как я думаю, что он чувствует себя лучше при работе со слоем API.

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