小编mvo*_*hak的帖子

如何应对redux中的状态变化并发出另一个动作?

有人可以给我提供有关如何使用react-redux执行以下操作的线索:

组件A调度更新状态的操作(异步)

组件B(不是A的子组件)需要能够检测状态何时更改并发送另一个操作.

我的问题是当我尝试在组件B中执行调度操作2时,状态仍处于初始状态且未更新.

我也尝试在componentWillUpdate中调度动作2,但是,它会创建一个无限循环,因为第二个动作也会更新状态(也是异步)

这或多或少是这样的:

//----- Component A
class ComponentA extends React.Component {
  constructor(props) {
    super(props);
    this.props.dispatch(loadEvents()); // loadEvents is async and will   update state.eventsState
  }
}

const mapStateToProps = function (state) {
  return {
    eventsState: state.eventsState,
  };
};

export default connect(mapStateToProps)(ComponentA);


//----- Component B
class ComponentA extends React.Component {
  constructor(props) {
    super(props);
    props.dispatch(getEventUsers(props.eventsState.eventId)); // the eventsState is in initial state here (empty)...where do I call getEventUsers?
  }

  componentWillUpdate(nextProps) {
    nextProps.dispatch(getEventUsers(props.eventsState.eventId)) // Creates an infinite loop, getEventUsers also updates …
Run Code Online (Sandbox Code Playgroud)

reactjs redux react-redux

8
推荐指数
1
解决办法
4654
查看次数

Angular UI-Router模式删除父状态

我正在开发一个具有ui-router模块的角度应用程序.当进入路由器的某个状态时,我会显示一个模态对话框,然后替换我的父视图.我想保留父视图并将模态显示为叠加.有没有办法用ui-router做到这一点?

举个例子:

$stateProvider.state("clients.list", {
    url: "/list",
    templateUrl: "app/client/templates/client-list.tpl.html",
    controller: moduleNamespace.clientListController,
    resolve: {
        clients: function (ClientService) {
            return ClientService.all();
        }
    }
})
// This will replace "clients.list", and show the modal
// I want to just overlay the modal on top of "clients.list"
.state("clients.add", {
    url: "/add",
    onEnter: function ($stateParams, $rootScope, $state, ngDialog) {
        ngDialog.open({
            controller: moduleNamespace.clientAddController,
            template: "app/client/templates/client-add.tpl.html"
        });

        $rootScope.$on("ngDialog.closed", function (e, $dialog) 
              if ($state.current.name !== "clients.list") $state.transitionTo("clients.list");
        });
    }
})
Run Code Online (Sandbox Code Playgroud)

谢谢

angularjs angular-ui-router

4
推荐指数
1
解决办法
2943
查看次数