在redux动作创建者中设置监听器是个坏主意吗?

时间:2017-06-25 07:14:35

标签: javascript reactjs react-native redux redux-thunk

我正在构建一个应用程序,它会不断监听位置更改并更新商店。我想知道将我的听众放在我的动作创建者而不是组件本身中是否是一个好主意。

例如,



componentWillMount() {
    this.props.watchLocation();
}

// inside action creator
export function watchLocation() {
  LocationManager.on("location", location => {
    dispatchLocationlocation);
  });
}




或者,在我的react-native组件中,



componentWillMount() {
  LocationManager.on("location", location => {
    // call action to dispatch location updates
  });
}




如果我将我的听众放在我的动作创作者中,那么在表现方面会有什么不同?

2 个答案:

答案 0 :(得分:1)

如果您在动作创建者或组件本身中设置了侦听器,那么性能不会有任何差异,但我认为在动作创建器中设置它们是个好主意,因为您可以轻松访问当前动作创建者中的状态(使用redux-thunk或其他一些包)并允许代码更具扩展性。

答案 1 :(得分:1)

在表现方面,我并不认为这有很大的不同,但我不同意Varun关于听众安置的回答。如果您创建此类操作并将其分派一次,则需要额外的操作来更新存储(当然,您可以使用thunk),并且稍后可能很难禁用回调,因为您将无法访问回调引用,因为它仅用于动作调用。如果使用componentDidMount / componentWillUnmount生命周期方法来跟踪事件处理程序,则很容易避免内存泄漏。顺便说一句,不要将componentWillMount用于任何可能导致副作用的事情:

  

在安装发生之前立即调用componentWillMount()。它在render()之前调用,因此在此方法中同步设置状态不会触发重新呈现。避免在此方法中引入任何副作用或订阅。

有关详细信息,请参阅documentation