【发布时间】:2021-06-04 09:49:30
【问题描述】:
假设我们有以下状态及其减速器操作
type User = {
id: number
}
type LoginState = {
user?: User,
isLoggingIn: boolean,
isLoggedIn: boolean,
error?: Error
}
type LoginActions =
| { type: 'START_LOGGING_IN' }
| { type: 'SUCCESSFUL_LOG_IN', user: User }
| { type: 'ERROR', error: Error }
| { type: 'START_LOGGING_IN' }
如果我想从我的所有应用程序中使用这种状态,我肯定需要一些反应上下文解决方案。我不希望对这个问题使用任何外部依赖项。
但是,在some fsharp learning 之后,这种方法导致不可能的状态成为可能。例如,如果我们在 reducer 中出错,状态 isLoggedIn 可能会出错。
解决方案是使 LoginState 成为可区分的联合类型,但就我测试了 useReducer 的打字稿类型而言,强制我拥有一个类型中的所有属性,就像在示例中一样。
那么,这个问题通常是如何解决的呢?我知道我描述的示例是标准方法,但是,每当使用登录状态时,我必须在每个地方处理用户不存在的情况,这是我不想要的。我想要这个问题最安全的解决方案,所以请不要使用type assertions。
如果我在某些断言中有错误,请纠正我,我对前端的东西很困惑:S
谢谢!
【问题讨论】:
标签: reactjs typescript react-hooks