angularjs – 带Redux的Angular表单
在使用Redux和Angular时寻找一些建议.我在过去的几天里一直在研究Redux,并且认为它是存储应用程序数据的好方法.我遇到麻烦的部分是是否要坚持商店内的所有东西或只是某些部分.理想情况下,我认为整个应用程序应该在商店中运行,但对于表单而言,这似乎非常繁琐.
例如,假设我正在使用表单添加新产品.以下是我的一些痛点. >我想将User Reducer(商店)与实际的表单状态分开.我应该为每个组件创建一个单独的表单减少器吗? 在使用Redux在Angular中创建表单时,任何人都有任何好的建议吗? 解决方法
答案是“它取决于”.此外,假设您确信单向数据流和redux的好处,因此如果给出选择,则更喜欢redux而不是双向数据绑定.
>超级简单的形式(没有验证,没有与其他州的复杂关系).然后你可以“裸体”并直接将输入连接到redux.在我们的用例中,我们实际上决定使用Angular表单,因为我们认为它处理边缘情况(IE和safari mobile). 更新表单以响应redux状态更改 常见的用例实际上非常简单.一个具体的例子将有所帮助—假设表单跟踪应用程序设置,同时应用程序设置存在为redux状态.也就是说,Angular形式和redux状态之间存在双向数据绑定.这可能是常见的用例. 在这种情况下,解决方案是像以前一样继续:通过调度更新操作从Angular表单更新redux状态,并通过#mapStateToThis从redux状态更新Angular表单. Angular ----dispatch actions-----> Redux Form <----mapStateToThis-------- State 唯一的问题是不能将Redux状态直接传递给Angular形式,即深度克隆数据或使用ImmutableJS. 另一个常见的用例是实现“表单重置”,即,例如,在按下按钮之后将表单重置为“原始”状态.同样,一个具体的例子将有助于:
首先,据我所知,Angular不会自动跟踪“初始”状态.你必须自己做,你也可以把这个状态放在redux中.然后,初始表单值只是app.pristine为false时的应用程序设置. (如果你想把它放在#mapStateToThis中,不要.在转换函数中做副作用似乎很奇怪.)更好的方法是使用异步动作,即onChange监听器的形式: // thunk example onFormChange(newForm) { return (dispatch,getState) => { const appSettings = getState().appSettings; const appIsPristine = appSettings.pristine; // this will fire once because the next action will set it to false appIsPristine && dispatch(initForm(appSettings))); dispatch(updateAppSettings(newForm)); }; }, 重置操作按预期工作(我不会概述). 总而言之,我应该补充一点,上面假设只有Angular表单可以弄脏应用程序设置—否则,可能永远不会存储初始表单值.如果是这种情况,那么一个惯用的解决方案就是创建一个自定义中间件,在app.pristine变为true时设置初始表单值. (或者,使用Angular手表.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |