reactjs - react-redux 在 componentDidMount 上重新渲染
问题描述
我将 React 与 Redux 与多个减速器一起使用。
我有一个组件,我想从多个减速器中获取数据,但每次我发出号召性用语时,它都会重新渲染组件(显然......)
async componentDidMount() {
await this.props.getBooksNamesAsync();
await this.props.getAuthorsNamesAsync();
await this.props.getSubscribersAsync();
this.props.setFilter(
this.props.book.bookNames,
this.props.author.authorNames,
this.props.subscriber.subscriberNames
);
}
- this.props.getBooksNamesAsync() 是对书的操作。
- this.props.getAuthorsNamesAsync() 是对作者的操作。
- this.props.getSubscribersAsync() 是对订阅者的操作。
我的问题是此类问题的最佳做法是什么?
- 每个动作都重新渲染组件是合法的吗?
- 我应该在一个地方编写另一个包含所有这些操作的操作吗?这是安静的代码重复,我更愿意避免它......
或任何其他选择...
解决方案
每次状态更改时组件都会重新呈现...您可以并且应该...这是一个旧项目的示例:
第一个动作创建者:
export const fetchPosts = () => async (dispatch) => {
const response = await axios.get('/posts');
dispatch({ type: 'FETCH_POSTS', payload: response.data });
};
第二个动作创建者:
export const fetchUser = id => async dispatch => {
const response = await axios.get(`/users/${id}`);
dispatch({ type: 'FETCH_USER', payload: response.data });
};
两者结合:(注意,它正在使用 lodash 但你不必......)
export const fetchPostsAnUsers = () => async (dispatch, getState) => {
await dispatch(fetchPosts());
const userIds = uniq(map(getState().posts, 'userId'));
userIds.forEach(id => dispatch(fetchUser(id)));
};
这是一个减少对 api 的调用次数的用例,但同样适用于您的用例......
推荐阅读
- oracle-adf - 在 adf 中,当 autosubmit ="true" 时,实体验证将被跳过
- ubuntu - Octave 在 octave 包中找不到函数(流线型)
- c# - 需要将数据从excel导入C#中的数组
- docker - .Net Core Windows 服务未安装在 docker 容器中
- rest - 如何将 API amember pro 集成到 ionic 5 应用程序中
- python - Python 错误 1064:您的 SQL 语法有错误 | Arduino 串行
- android - MotionLayout 折叠 RecyclerView 标头但不展开
- powerbi - 如何使用 SUMX 和 VALUES 逐行计算 - ALLSELECTED 似乎不适用于 SUMX/VALUES?
- flask - 将变量从浏览器发送到 dash plotly 仪表板
- php - 如何使用 PHP 从 Excel 转换负数