访问 redux 而不做出反应
Access redux without react
我想在不使用 React 组件的情况下访问存储(调度和观察)。我一直在寻找几个小时,没有结果。
事实就是如此。我已经在应用程序根目录中创建了商店:
import { Provider } from 'react-redux'
import createStore from './state/store';
let store = createStore();
ReactDOM.render(
<Provider store={store}>
<App>
</Provider>,
document.getElementById('root')
);
当我需要添加操作或侦听组件中的状态更改时,我很高兴使用 react-redux
提供的 connect
函数,但是当我想在组件之外设置一些逻辑(主要是调度)时,我卡住了。
简而言之,我想验证一个字段。我想创建一个validation.js
文件,我可以在其中侦听来自存储的更改,运行验证逻辑,然后调度包含最终错误的操作。
就商店而言,它不是全局的,我没有使用 React 组件。让商店侦听更改和调度操作的方法是什么?
提前谢谢。
这是我所做的(在创建我的商店之后):
export const dispatch = store.dispatch
然后,您可以从代码中的任何位置调用dispatch
(尽管我几乎只是从事件处理程序中执行此操作)。
如果使用 Redux-Saga 来管理流控制,除了用于直接用户输入的事件处理程序之外,您很少需要使用 dispatch
,因为它将调度包装在其put
API 中。
我认为您不应该直接从商店监听更改,但您需要它来调度操作。
倾听变化
redux
,您调用这种逻辑的自然位置是调度字段中更改的action
。
export function updateSomeField(value, field) {
fieldValidator.validate()
return { type: ActionTypes.UPDATE_SOME_FIELD, field: field, value: value }
}
fieldValidator
可以保存对存储的引用,以便获取他所需的状态,以便使用 store.getState()
执行他的逻辑,或者从操作中获取该数据作为参数(借助异步操作):
export function updateSomeField(value, field) {
return (dispatch, getState) => {
fieldValidator.validate(getState.myScreen.fields)
dispatch({ type: ActionTypes.UPDATE_SOME_FIELD, field: field, value: value })
}
}
获取商店
创建后,您可以将其提供给需要它的任何人。您可以通过初始化单例来执行此操作
let store = createStore();
FieldValidator.setInstance(new FieldValidator(store));
// FieldValidator.js
class FieldValidator {
...
static _instance = null;
static getInstance() {
return FieldValidator._instance;
}
static setInstance(fieldValidator) {
FieldValidator._instance = fieldValidator;
}
...
}
或通过注入成员
let store = createStore();
fieldValidator.store = store;
- 访问布局信息是否也会导致浏览器重排
- Javascript,访问一个主要对象模块模式中的每个对象
- 如何访问声音管理器2创建的声音对象
- 在Twitter上用ie9中的空白src访问iframe的contentWindow
- JavaScript Pub/Sub属性访问问题
- 从JavaScript访问struts操作中的属性
- 从redux中访问服务器道具
- 可以't访问上下文.带有react路由器redux的路由器
- 访问 redux 而不做出反应
- 从通过 React 路由器设置的路由访问 Redux 存储
- 如何使用重新选择访问当前的 Redux 状态
- 从 redux-simple-router 子级访问 redux 存储
- 在尝试管理和访问不同组件和处理程序方法中的状态时,我可以使用RxJS与Redux/context吗
- Redux;通过combineRoducer使用组合减速器时访问状态的其他部分
- 在Redux和React Native应用程序中访问Store
- 从深度嵌套的组件访问redux分派
- 如何访问react redux中的元素节点
- 如何访问Redux reducer内部的状态
- 访问与Redux状态数据一起发送给组件的props
- 如何在reducer (redux-router)中访问当前位置