访问函数内部的 redux store
Accessing redux store inside functions
我希望从 .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
附加class,我可以通过connect()
附加功能吗?
访问商店的正确位置是通过容器,connect
用于将容器连接到组件,不能将随机函数连接到它。
有一个 logger middleware for redux 你可能不想看,它可以实现你想要实现的目标。
要使用它,只需将它作为中间件传递给您的商店:
import createLogger from 'redux-logger';
const store = createStore(
reducer,
applyMiddleware(logger)
);
调试 redux 应用程序更合适的方法是使用 React Dev Tools, if you use Chrome, I recommend you to use the React Dev Tools Extension. Just install it 并将其用作中间件
let store = createStore(reducer, window.devToolsExtension && window.devToolsExtension());
有了它,您可以随时查看商店的整体状态,查看正在触发的操作以及它们如何影响商店,甚至可以通过取消操作来倒带您的应用程序。
是的。您可以通过连接附加函数,如下所示;
const mapDispatchToProps = (dispatch) => {
return {
testFunction: (param1) => dispatch(testFunction(param1)),
testFunction1: () => dispatch(testFunction1())
};
};
export default function connect(mapStateToProps, mapDispatchToProps)(log);
编辑 1
Some_File.js
import store from './redux/store.js';
function aFunction(){
var newState =store.getState();
console.log('state changed');
}
store.subscribe(aFunction)
我假设你已经按照 redux 的预期创建了 store 和 reducers。
~~~~~~~~~~~~~~~
原始答案开始
这是一种 hack,我不知道你在做什么,所以我不能说你应该或不应该这样做,但你可以就这样我已经复制粘贴了您的一些代码并做了一些修改。
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
。
如果你有一个纯功能组件,那么你可以像这样直接访问 redux 状态:
import store from './redux/store';
function getStoreDetails() {
console.log(store.getState());
}
redux state 可以通过使用以下格式在函数中作为 prop 访问。
1:
import { connect } from 'react-redux';
// log accepts logMessage as a prop
function log(props) {
const { environment, logMessage } = props;
console.debug('environment' + environment + logMessage );
....
}
function mapStateToProps(state) {
return {
environment : state.authReducer.environment
};
}
export default connect(mapStateToProps)(log);
如何使用日志功能?
log({ logMessage: "Error message" });
2:
// import redux store
import { store } from './Store';
function log(logMessage) {
const currentState = store.getState();
const environment = currentState.authReducer.environment;
console.debug('environment' + environment + logMessage);
....
}
我希望从 .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
附加class,我可以通过connect()
附加功能吗?
访问商店的正确位置是通过容器,connect
用于将容器连接到组件,不能将随机函数连接到它。
有一个 logger middleware for redux 你可能不想看,它可以实现你想要实现的目标。
要使用它,只需将它作为中间件传递给您的商店:
import createLogger from 'redux-logger';
const store = createStore(
reducer,
applyMiddleware(logger)
);
调试 redux 应用程序更合适的方法是使用 React Dev Tools, if you use Chrome, I recommend you to use the React Dev Tools Extension. Just install it 并将其用作中间件
let store = createStore(reducer, window.devToolsExtension && window.devToolsExtension());
有了它,您可以随时查看商店的整体状态,查看正在触发的操作以及它们如何影响商店,甚至可以通过取消操作来倒带您的应用程序。
是的。您可以通过连接附加函数,如下所示;
const mapDispatchToProps = (dispatch) => {
return {
testFunction: (param1) => dispatch(testFunction(param1)),
testFunction1: () => dispatch(testFunction1())
};
};
export default function connect(mapStateToProps, mapDispatchToProps)(log);
编辑 1
Some_File.js
import store from './redux/store.js';
function aFunction(){
var newState =store.getState();
console.log('state changed');
}
store.subscribe(aFunction)
我假设你已经按照 redux 的预期创建了 store 和 reducers。
~~~~~~~~~~~~~~~
原始答案开始
这是一种 hack,我不知道你在做什么,所以我不能说你应该或不应该这样做,但你可以就这样我已经复制粘贴了您的一些代码并做了一些修改。
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
。
如果你有一个纯功能组件,那么你可以像这样直接访问 redux 状态:
import store from './redux/store';
function getStoreDetails() {
console.log(store.getState());
}
redux state 可以通过使用以下格式在函数中作为 prop 访问。
1:
import { connect } from 'react-redux';
// log accepts logMessage as a prop
function log(props) {
const { environment, logMessage } = props;
console.debug('environment' + environment + logMessage );
....
}
function mapStateToProps(state) {
return {
environment : state.authReducer.environment
};
}
export default connect(mapStateToProps)(log);
如何使用日志功能?
log({ logMessage: "Error message" });
2:
// import redux store
import { store } from './Store';
function log(logMessage) {
const currentState = store.getState();
const environment = currentState.authReducer.environment;
console.debug('environment' + environment + logMessage);
....
}