Reactjs 如何在选择器中将以前的状态与新状态进行比较
我有两个减速机,Reactjs 如何在选择器中将以前的状态与新状态进行比较,reactjs,redux,react-redux,reselect,Reactjs,Redux,React Redux,Reselect,我有两个减速机,form1和form2。我还有一个“选择器”,用于确定两个表单是否都已完成,getAreFormsComplete getAreFormsComplete的状态将以false开始,在form1和form2完成后,将变为true。如果用户从任何一个表单中删除数据,并且我想查看具体的更改,那么状态可能会返回false 当getAreFormsComplete的值从true更改为false(而不是从false更改为true)时,我需要执行一个操作 我将如何在Redux中执行此操作。我可
form1
和form2
。我还有一个“选择器”,用于确定两个表单是否都已完成,getAreFormsComplete
getAreFormsComplete
的状态将以false开始,在form1
和form2
完成后,将变为true。如果用户从任何一个表单中删除数据,并且我想查看具体的更改,那么状态可能会返回false
当getAreFormsComplete的值从true更改为false(而不是从false更改为true)时,我需要执行一个操作
我将如何在Redux中执行此操作。我可能需要getAreFormsComplete的先前状态
如何将选择器中的前一个状态与新状态进行比较,然后在状态发生变化时更新还原器中的某些状态
选择器.js
store.subscribe是redux和选择器解决方案的关键,currentAreFormsComplete变量是先前的状态,我将其与store进行比较
function observeAreFormsComplete(store) {
let currentAreFormsComplete
function handleChange() {
let nextAreFormsComplete = selectors.getAreFormsComplete(store.getState())
if (nextAreFormsComplete !== currentAreFormsComplete
&& store.getState().ui.formsUncompleted == false) {
if (nextAreFormsComplete === false
&& currentAreFormsComplete === true) {
store.dispatch(formsUncompleted())
}
}
currentAreFormsComplete = nextAreFormsComplete
}
let unsubscribe = store.subscribe(handleChange)
return unsubscribe
}
store.subscribe是redux和选择器解决方案的关键,currentAreFormsComplete变量是先前的状态,我将其与store进行比较
function observeAreFormsComplete(store) {
let currentAreFormsComplete
function handleChange() {
let nextAreFormsComplete = selectors.getAreFormsComplete(store.getState())
if (nextAreFormsComplete !== currentAreFormsComplete
&& store.getState().ui.formsUncompleted == false) {
if (nextAreFormsComplete === false
&& currentAreFormsComplete === true) {
store.dispatch(formsUncompleted())
}
}
currentAreFormsComplete = nextAreFormsComplete
}
let unsubscribe = store.subscribe(handleChange)
return unsubscribe
}
所以我认为你需要多读点书。。检查formstate是否已更改应该在组件中,正确的检查位置是
componentWillReceiveProps
。您的选择器只需按原样选择状态。您可以使用reduxconnect
hoc将此状态连接到组件。您的组件接收新的道具,并且组件将接收道具允许您将当前道具(this.props
)与参数nextrops
进行比较
对于使用redux处理表单,有许多库可以帮助您管理状态(我使用redux表单
我自己)
你不应该在商店里转悠(除非你不想出于任何原因使用react redux) 所以我认为你需要多读一点。。检查formstate是否已更改应该在组件中,正确的检查位置是componentWillReceiveProps
。您的选择器只需按原样选择状态。您可以使用reduxconnect
hoc将此状态连接到组件。您的组件接收新的道具,并且组件将接收道具允许您将当前道具(this.props
)与参数nextrops
进行比较
对于使用redux处理表单,有许多库可以帮助您管理状态(我使用redux表单
我自己)
你不应该在商店里转悠(除非你不想出于任何原因使用react redux) 谢谢Dennie,我对redux和react很陌生。是的,我正在我的应用程序的其他部分使用connect(react-redux)助手,是的,我正在使用react-JS(我应该删除标记吗?我想这更多的是一个redux问题,我只是不知道是否有更react-redux的方法来做这件事。谢谢Dennie,我对redux和react非常陌生。是的,我正在使用connect(react-redux)我的应用程序的其他部分的助手,是的,我正在使用reactjs(我应该删除标签吗?我想这更多的是一个只针对redux的问题,我只是不知道是否有一种更具反应性的redux方法来做这件事比较旧状态和新状态正是componentWillReceiveProps的目的。好的,我理解。还有一些额外的信息超出了我最初的问题。)(我试图让事情简单化,但可能错过了关键信息)。当用户将任一表单恢复为未完成状态时,我需要询问用户是否希望继续,因为这样做将删除任何相关数据。如果选择“是”,则删除相关数据并将表单恢复为原始状态;如果选择“否”,则保持状态不变并关闭模式。将旧状态与新状态进行比较正是组件所需的illReceiveProps是为。好的,我理解。还有一些额外的信息,有点超出了我原来的问题(我试图保持简单,但可能错过了关键信息)。当用户将任一表单恢复为未完成状态时,我需要询问用户是否希望继续,因为这样做将删除任何相关数据。如果选择“是”,则删除相关数据并将表单恢复为原始状态;如果选择“否”,则保持状态不变并关闭模式。