Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何在选择器中将以前的状态与新状态进行比较_Reactjs_Redux_React Redux_Reselect - Fatal编程技术网

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
。您的选择器只需按原样选择状态
。您可以使用redux
connect
hoc将此状态连接到组件。您的组件接收新的道具,并且
组件将接收道具
允许您将当前道具(
this.props
)与参数
nextrops
进行比较

对于使用redux处理表单,有许多库可以帮助您管理状态(我使用
redux表单
我自己)


你不应该在商店里转悠(除非你不想出于任何原因使用react redux)

所以我认为你需要多读一点。。检查formstate是否已更改应该在组件中,正确的检查位置是
componentWillReceiveProps
。您的选择器只需按原样选择状态
。您可以使用redux
connect
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是为。好的,我理解。还有一些额外的信息,有点超出了我原来的问题(我试图保持简单,但可能错过了关键信息)。当用户将任一表单恢复为未完成状态时,我需要询问用户是否希望继续,因为这样做将删除任何相关数据。如果选择“是”,则删除相关数据并将表单恢复为原始状态;如果选择“否”,则保持状态不变并关闭模式。