我正在使用React Native和Redux创建一个应用程序,帮助用户找到附近的快餐。我有两个组件:地图和设置。
每个组件都(通过 react-redux(连接到其各自的状态片段。Map
还可以调度一个名为apiCall
的操作创建者:
地图组件
...
connect(
({ map }) => ({ map }),
{ apiCall }
)(Map)
设置组件
...
connect(
({ settings }) => ({ settings })
)(Settings)
我希望动作创建者apiCall
从map
和settings
状态片段中读取值: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);
}
}