Redux - 具有来自不同状态的参数的动作创建者



我正在使用React Native和Redux创建一个应用程序,帮助用户找到附近的快餐。我有两个组件:地图和设置。

每个组件都(通过 react-redux(连接到其各自的状态片段。Map还可以调度一个名为apiCall的操作创建者:

地图组件

...
connect(
({ map }) => ({ map }),
{ apiCall }
)(Map)

设置组件

...
connect(
({ settings }) => ({ settings })
)(Settings)

我希望动作创建者apiCallmapsettings状态片段中读取值:this.props.apiCall(map, settings)

但是,我想避免将 Map 组件连接到state.settings,因为它会在每次更新state.settings重新渲染。

我仍然很困惑,没有找到解决这个问题的"正确方法"。这些是我尝试过的事情:

  • Map连接到state.settings并使用shouldComponentUpdate()来防止无用的重新渲染
  • 使用操作创建者getState()读取state.settings
  • 将所有内容封装在另一个更高的组件中,然后传递特定的道具

前两个有效,但似乎有点反模式,第三个仍然触发重新渲染。不太确定为什么,即使这感觉是一个很好的解决方案。我还没有尝试过选择器,但它似乎是另一种选择。

综上所述,我的问题是:

如何调度需要从不同状态片段读取值的操作,同时避免不必要的重新渲染?

你应该使用redux-thunk.这样,您就可以在操作创建器中返回一个函数(thunk(,该函数将有权访问状态

const apiCall = (apiCallArgs) => {
return (dispatch, getState) => {
let mapState = getState('map');
let settingsState = getState('settings');
return dispatch(yourApiAction);
}
}

最新更新