Доступ к функциям восстановления

Я бы предпочел, чтобы функция была открыта из файла .js, внутри этой функции я предпочел бы иметь доступ к переменным в хранилище.

Фрагмент кода: -

import { connect } from 'react-redux';

function log(logMessage) {
    const {environment} = this.props;
    console.debug('environment' + environment + logMessage ); 
    ....
}

function mapStateToProps(state) {
    return {
        environment : state.authReducer.environment
    };
}

export default function connect(mapStateToProps)(log);

У меня есть много компонентов, которые присоединяют класс через connect, я могу присоединить функции через connect()?

Ответ 1

Изменить 1

Some_File.js

import store from './redux/store.js';

function aFunction(){
   var newState =store.getState();
   console.log('state changed');
}

store.subscribe(aFunction)

Я предполагаю, что вы создали хранилище и редукторы, как ожидает сокращение.

~~~~~~~~~~~~~~~

Оригинальный ответ начинается

Это своего рода хак, Я не знаю, что вы делаете, поэтому я не могу сказать, что вам нужно, или вы не должны этого делать, но вы можете сделать это таким образом. Я скопировал некоторые из вашего кода с некоторыми изменениями.

Class XYZ extends React.Component{
     componentWillReceiveProps(props){
       //in your case this.props.storeCopy is redux state.
      //this function will be called every time state changes
     }

     render(){
        return null;
     }
}



function mapStateToProps(state) {
    return {
        storeCopy : state
    };
}

export default function connect(mapStateToProps)(XYZ);

Поместите этот компонент где-то наверху, можно просто внутри provider, всякий раз, когда состояние изменяет этот componentWillReceiveProps этого компонента, будет вызываться.

Ответ 2

Правильное место для доступа к хранилищу через контейнер, connect используется для подключения контейнера к компоненту, вы не можете подключить к нему случайную функцию.

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

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

import createLogger from 'redux-logger';

const store = createStore(
  reducer,
  applyMiddleware(logger)
);

Более правильным способом отладки приложения redux является использование React Dev Tools, если вы используете Chrome, я рекомендую вам использовать React Dev Tools Extension. Просто установите его и используйте его как промежуточное ПО

let store = createStore(reducer, window.devToolsExtension && window.devToolsExtension());

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

Ответ 3

Да. Вы можете подключать функции через соединение, как показано ниже:

  const mapDispatchToProps = (dispatch) => {
     return {
       testFunction: (param1) => dispatch(testFunction(param1)),
       testFunction1: () => dispatch(testFunction1())
    };
 };

 export default function connect(mapStateToProps, mapDispatchToProps)(log);

Ответ 4

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

import store './redux/store';

function getStoreDetails() {
   console.log(store.getState());
}