ngxs - ngxs 实验室 immer 要求完整状态?
问题描述
我严格遵循 ngxs/labs immer 文档来调整我的代码并发现这种奇怪的行为。
为什么要setState
在以下位置询问所有状态属性:
export class DadesStateModel {
apartats: IApartat[];
authors: IAuthor[];
}
(...)
@Action(SetArticles)
@ImmutableContext()
setArticles({setState}: StateContext<DadesStateModel>, {apartat}: SetArticles) {
setState((state: DadesStateModel) => ({
state.apartats[state.apartats.findIndex(ap=>ap.Id===apartat.Id)] = apartat;
return state;
}))
}
带有以下错误消息:
Argument of type '(state: DadesStateModel) => { state: DadesStateModel; (Missing): IApartat; return: DadesStateModel; }' is not assignable to parameter of type 'DadesStateModel | StateOperator<DadesStateModel>'.
Type '(state: DadesStateModel) => { state: DadesStateModel; (Missing): IApartat; return: DadesStateModel; }' is not assignable to type 'StateOperator<DadesStateModel>'.
Type '{ state: DadesStateModel; (Missing): IApartat; return: DadesStateModel; }' is missing the following properties from type 'DadesStateModel': authors.
解决方案
即使我的回答来晚了一点:由于语法错误,您会看到此错误。您将{}
lambda 中的括号括({})
起来,因此它假定您打算成为 lambda 的主体是 lambda 的返回值。只需删除封闭的括号,它就可以工作。
setState((state: DadesStateModel) => { // Instead of "({"
state.apartats[state.apartats.findIndex(ap=>ap.Id===apartat.Id)] = apartat;
return state;
}); // Instead of "}));"
推荐阅读
- ios - 出现键盘时 ScrollView 不滚动如果 ContentView 中的元素
- css - 如何使用 bulma 将文本放入 HTML5 中的进度条?
- ios - 由于 CompileSwift 构建命令失败,Travis-CI 构建失败
- android - React Native 应用程序是多个 dex,具有超过 65536 种方法
- javascript - 数组不是javascript单元测试角度中的构造函数
- c# - asp.net 通过函数验证多视图中活动页面视图上的所有控件
- c# - React Native 中的 Instamojo 支付集成
- c# - 具有 ProjectReference 依赖项的 NuGet 版本控制
- node.js - 无法在中间件中获取 JWT 令牌
- java - 为什么在 pom.xml / maven 中有排除依赖项的选项?