Обнаружение угловых изменений не может быть запущено через состояние приложения Redux - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть небольшой проект на основе AngularDart , Redux и Sockets.io .

В этом проекте отображается тривиальный компонентсписок предметов.Список элементов отображается после того, как промежуточное ПО Redux запросило информацию из бэкэнда API.Все отлично работает, и у меня есть мой список предметов.

items_component.dart:

import 'package:angular/angular.dart';
import 'package:p_web/src/models/item.dart';
import 'package:p_web/src/redux/app_actions.dart';
import 'package:p_web/src/redux/app_state.dart';
import 'package:redux/redux.dart';

@Component(
    selector: "content",
    templateUrl: "items_component.html",
    directives: [
        NgFor,
    ]
)
class ItemsComponent implements OnInit {
    ItemsComponent(this._store);
    final Store<AppState> _store;

    List<Item> get items => _store.state.items;

    @override
    void ngOnInit() async {
        // Asks the Redux middleware to fetch the data, after which is uses the
        // response to create a new application state. (the usual redux dance).
        _store.dispatch(MGetItems());
    }
}

items_component.html:

<ul>
    <li *ngFor="let item of items">{{item.name}}</li>
</ul>

Теперь через сокеты.io, API-интерфейс иногда отправляет сообщение в проект AngularDart.В результате получения сообщения отправляется действие MGetItems.Опять же, все работает, как ожидалось, и новая версия состояния приложения создается с новыми элементами из ответа.

Проблема заключается в том, что, хотя состояние приложения было изменено (путем создания нового - Redux)Dance), на этот раз компонент не перестраивается и список элементов не отражает изменений.Как будто Обнаружение изменений не происходит, и я не знаю почему.

Я боролся с этим в течение 3 дней безрезультатно.Есть ли что-то, что я делаю неправильно, или есть что-то еще, что я пропускаю.То, что я хочу, это просто, когда состояние приложения изменяется таким образом, что изменяет результат получения компонента, я хочу, чтобы указанный компонент обновлялся.

Вот редуктор, который отвечает за создание новоговерсия состояния приложения.

app_reducer.dart

import 'package:p_web/src/redux/app_actions.dart';
import 'package:p_web/src/redux/app_state.dart';

AppState appReducer(AppState state, action) {

    if (action is RSetItems) {
        return state.copyWith(
            items: action.items
        );
    }
    return state;
}

app_state.dart:

import 'package:meta/meta.dart';
import 'package:p_web/src/models/item.dart';

@immutable
class AppState {

    final List<Item> items;

    AppState({
        this.items
    });

    AppState copyWith({
        List<Item> items,
    }) {
        return AppState(
            items: items ?? this.items,
        );
    }
}

...