【发布时间】:2019-08-24 07:49:36
【问题描述】:
使用 React,我有以下使用 useEffect() 的功能组件:
import React, { useEffect } from 'react';
import { connect } from 'react-redux';
const MessagingComponent = React.memo(({ loadMessages, messages, ...props }) => {
useEffect(() => {
loadMessages();
});
return <div {...props}>These are the messages</div>;
});
const mapDispatchToProps = dispatch => ({
loadMessages: () => dispatch({ type: 'LOAD_MESSAGES' })
});
const mapStateToProps = state => {
return {
messages: state.chatt.messages.chatMessages
};
};
export default connect(
mapStateToProps,
mapDispatchToProps
)(MessagingComponent);
如你所见,我在MessagingComponent 的useEffect() 回调中调用了loadMessages() 函数的效果回调:
useEffect(() => {
loadMessages();
});
对loadMessages() 的调用会加载导致组件重新渲染的消息。这种行为符合预期,但问题是重新渲染会导致useEffect() 钩子再次触发,从而导致loadMessages() 再次被调用。这反过来从后端加载消息并导致组件再次呈现,并且循环重复。
我怎样才能避免这种情况?我应该在useEffect() 钩子中简单地放置一个 if 条件,然后检查 messages 属性吗?
【问题讨论】:
标签: reactjs redux react-hooks