我正在做一個非常簡單的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