我正在做一个非常简单的NgRx实现,现在只是做一个组件的get。数据根据Redux Devtool在有效负载中传递,但我似乎无法通过异步管道访问它。NgRx无法从商店中选择
Devtool:
---更新----
的问题是,当我在TS文件访问该片,我得到的错误
''network''类型的参数不能分配给类型为 的参数''start''。
TS文件
constructor(private store: Store<fromApp.AppState>) {}
getDns() {
// reach out to ngrx store
this.dnsServers$ = this.store.select('network').map(network => network.dns)
console.log(this.dnsServers$)
// get current dns IPs'
this.networkService.getDns()
.subscribe(
(dnsList: Dns) => {
console.log(dnsList.dns);
this.store.dispatch(
new LoadIpSuccessAction(dnsList.dns)
)
}
)
}
我的功能模块
StoreModule.forFeature('network', { dns: dnsReducer })
我的根减速机(我没有不加载任何偷懒的模块,所以我的根减速机是空的...不知道如何使其工作)
import { Action } from '@ngrx/store';
export interface State {
start: string;
}
const initialState: State = {
start: ''
}
export function startReducer(state = initialState, action: Action) {
return state;
}
和我的更新功能减速访问DNS阵列
import * as NetworkActions from './network.actions';
import * as fromApp from '../../store/app.reducers';
export interface NetworkState extends fromApp.AppState {
dns: DnsState;
}
export interface DnsState {
dns: string[];
}
const initialState: DnsState = {
dns: []
}
export function dnsReducer(state = initialState, action: NetworkActions.DnsActions) {
switch (action.type) {
case NetworkActions.LOAD_IP_SUCCESS:
return {
...state,
dns: [...action.payload]
}
default:
return state;
}
}
尝试设置的dnsserver = this.store.select的定义( 'DNS')getDns之外()。如果您使用的是类型,请将类型设置为Obseravble for dnsServer。 – deek
getDns()在ngOninit()中被调用,所以我不关心它是否在外面。我最终会输入observable,但那不是解决问题 – FussinHussin
我想我知道。返回的有效载荷对象可能与订阅获取然后立即设置的值不同。可能最初只是空的,异步没有任何回应,但稍后会在调度后更新。但是,由于预计未定义DNS,导致它出错。因此,为什么它没有安全操作员而失败,但却安全地工作这些值稍后更新为工作值。 如果您将默认状态设置为具有DNS和某些假值的对象,它将起作用....尝试一下! – deek